mirror of
https://github.com/google/nomulus.git
synced 2025-04-30 03:57:51 +02:00
Make javadoc <p> style guide compliant
This led to confusion for an open source contributor about how to format code. We don't want to be like, "do as I say, not as I do." https://google.github.io/styleguide/javaguide.html#s7.1.2-javadoc-paragraphs ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=122589700
This commit is contained in:
parent
4854f875b0
commit
6f4b059cc9
79 changed files with 395 additions and 386 deletions
|
@ -183,8 +183,8 @@ public class BigqueryConnection implements AutoCloseable {
|
|||
* Class that wraps a normal Bigquery API Table object to make it immutable from the client side
|
||||
* and give it additional semantics as a "destination" for load or query jobs, with an overwrite
|
||||
* flag set by the client upon creation.
|
||||
* <p>
|
||||
* Additionally provides encapsulation so that clients of BigqueryConnection don't need to take
|
||||
*
|
||||
* <p>Additionally provides encapsulation so that clients of BigqueryConnection don't need to take
|
||||
* any direct dependencies on Bigquery API classes and can instead use DestinationTable.
|
||||
*/
|
||||
public static class DestinationTable {
|
||||
|
@ -365,8 +365,8 @@ public class BigqueryConnection implements AutoCloseable {
|
|||
* A function that updates the specified Bigquery table to reflect the metadata from the input
|
||||
* DestinationTable, passing the same DestinationTable through as the output. If the specified
|
||||
* table does not already exist, it will be inserted into the dataset.
|
||||
* <p>
|
||||
* Clients can call this function directly to update a table on demand, or can pass it to
|
||||
*
|
||||
* <p>Clients can call this function directly to update a table on demand, or can pass it to
|
||||
* Futures.transform() to update a table produced as the asynchronous result of a load or query
|
||||
* job (e.g. to add a description to it).
|
||||
*/
|
||||
|
@ -441,8 +441,8 @@ public class BigqueryConnection implements AutoCloseable {
|
|||
* ImmutableTable object, row-keyed by the row number (indexed from 1), column-keyed by the
|
||||
* TableFieldSchema for that column, and with the value object as the cell value. Note that null
|
||||
* values will not actually be null, but they can be checked for using Data.isNull().
|
||||
* <p>
|
||||
* Returns a ListenableFuture that holds the ImmutableTable on success.
|
||||
*
|
||||
* <p>Returns a ListenableFuture that holds the ImmutableTable on success.
|
||||
*/
|
||||
public ListenableFuture<ImmutableTable<Integer, TableFieldSchema, Object>>
|
||||
queryToLocalTable(String querySql) throws Exception {
|
||||
|
@ -465,9 +465,9 @@ public class BigqueryConnection implements AutoCloseable {
|
|||
* (indexed from 1), column-keyed by the TableFieldSchema for that field, and with the value
|
||||
* object as the cell value. Note that null values will not actually be null (since we're using
|
||||
* ImmutableTable) but they can be checked for using Data.isNull().
|
||||
* <p>
|
||||
* This table is fully materialized in memory (not lazily loaded), so it should not be used with
|
||||
* queries expected to return large results.
|
||||
*
|
||||
* <p>This table is fully materialized in memory (not lazily loaded), so it should not be used
|
||||
* with queries expected to return large results.
|
||||
*/
|
||||
private ImmutableTable<Integer, TableFieldSchema, Object> getQueryResults(Job job) {
|
||||
try {
|
||||
|
@ -555,8 +555,8 @@ public class BigqueryConnection implements AutoCloseable {
|
|||
* Starts an asynchronous job to run the provided query, store the results in a temporary table,
|
||||
* and then extract the contents of that table to the given GCS filepath in the specified
|
||||
* destination format, optionally printing headers.
|
||||
* <p>
|
||||
* Returns a ListenableFuture that holds the destination GCS URI on success.
|
||||
*
|
||||
* <p>Returns a ListenableFuture that holds the destination GCS URI on success.
|
||||
*/
|
||||
public ListenableFuture<String> extractQuery(
|
||||
String querySql,
|
||||
|
|
|
@ -90,14 +90,15 @@ public class BigqueryUtils {
|
|||
/**
|
||||
* A {@code DateTimeFormatter} that defines how to print DateTimes in a string format that
|
||||
* BigQuery can interpret and how to parse the string formats that BigQuery emits into DateTimes.
|
||||
* <p>
|
||||
* The general format definition is "YYYY-MM-DD HH:MM:SS.SSS[ ZZ]", where the fractional seconds
|
||||
* portion can have 0-6 decimal places (although we restrict it to 0-3 here since Joda DateTime
|
||||
* only supports up to millisecond precision) and the zone if not specified defaults to UTC.
|
||||
* <p>
|
||||
* Although we expect a zone specification of "UTC" when parsing, we don't emit it when printing
|
||||
* because in some cases BigQuery does not allow any time zone specification (instead it assumes
|
||||
* UTC for whatever input you provide) for input timestamp strings (see b/16380363).
|
||||
*
|
||||
* <p>The general format definition is "YYYY-MM-DD HH:MM:SS.SSS[ ZZ]", where the fractional
|
||||
* seconds portion can have 0-6 decimal places (although we restrict it to 0-3 here since Joda
|
||||
* DateTime only supports up to millisecond precision) and the zone if not specified defaults to
|
||||
* UTC.
|
||||
*
|
||||
* <p>Although we expect a zone specification of "UTC" when parsing, we don't emit it when
|
||||
* printing because in some cases BigQuery does not allow any time zone specification (instead it
|
||||
* assumes UTC for whatever input you provide) for input timestamp strings (see b/16380363).
|
||||
*
|
||||
* @see "https://developers.google.com/bigquery/timestamp"
|
||||
*/
|
||||
|
|
|
@ -28,8 +28,8 @@ import javax.servlet.http.HttpServletResponse;
|
|||
/**
|
||||
* The {@link EppTlsServlet} class establishes a transport for EPP+TLS over* HTTP. All commands and
|
||||
* responses are EPP XML according to RFC 5730. Commands must must requested via POST.
|
||||
* <p>
|
||||
* There are a number of expected headers to this endpoint:
|
||||
*
|
||||
* <p>There are a number of expected headers to this endpoint:
|
||||
* <dl>
|
||||
* <dt>{@value #SSL_CLIENT_CERTIFICATE_HASH_FIELD}
|
||||
* <dd>
|
||||
|
|
|
@ -34,8 +34,9 @@ import java.util.Set;
|
|||
|
||||
/**
|
||||
* An abstract EPP flow.
|
||||
* <p>
|
||||
* This class also contains static methods for loading an appropriate flow based on model classes.
|
||||
*
|
||||
* <p>This class also contains static methods for loading an appropriate flow based on model
|
||||
* classes.
|
||||
*/
|
||||
public abstract class Flow {
|
||||
|
||||
|
|
|
@ -151,9 +151,9 @@ public class FlowRegistry {
|
|||
/**
|
||||
* The domain restore command is technically a domain {@literal <update>}, but logically a totally
|
||||
* separate flow.
|
||||
* <p>
|
||||
* This provider must be tried before {@link #RESOURCE_CRUD_FLOW_PROVIDER}. Otherwise, the regular
|
||||
* domain update flow will match first.
|
||||
*
|
||||
* <p>This provider must be tried before {@link #RESOURCE_CRUD_FLOW_PROVIDER}. Otherwise, the
|
||||
* regular domain update flow will match first.
|
||||
*/
|
||||
private static final FlowProvider DOMAIN_RESTORE_FLOW_PROVIDER = new FlowProvider() {
|
||||
@Override
|
||||
|
|
|
@ -144,18 +144,18 @@ public class FlowRunner {
|
|||
|
||||
/**
|
||||
* Helper for logging in json format.
|
||||
* <p>
|
||||
* This is needed because the usual json outputters perform normalizations that we don't want or
|
||||
* need, since we know that our values never need to be escaped - there are only strings and
|
||||
*
|
||||
* <p>This is needed because the usual json outputters perform normalizations that we don't want
|
||||
* or need, since we know that our values never need to be escaped - there are only strings and
|
||||
* numbers, and the strings are not allowed to contain quote characters.
|
||||
* <p>
|
||||
* An example output for an EPP_Mutation:
|
||||
* {"trid":"abc-123", "client":"some_registrar", "tld":"com", "xmlBytes":"abc123DEF"}
|
||||
* <p>
|
||||
* An example output for an EPP_Mutation_Committed that doesn't create a new resource:
|
||||
*
|
||||
* <p>An example output for an EPP_Mutation: {"trid":"abc-123", "client":"some_registrar",
|
||||
* "tld":"com", "xmlBytes":"abc123DEF"}
|
||||
*
|
||||
* <p>An example output for an EPP_Mutation_Committed that doesn't create a new resource:
|
||||
* {"trid":"abc-123", "executionTime":123456789}
|
||||
* <p>
|
||||
* An example output for an EPP_Mutation_Committed that creates a new resource:
|
||||
*
|
||||
* <p>An example output for an EPP_Mutation_Committed that creates a new resource:
|
||||
* {"trid":"abc-123", "executionRepoId":123, "executionTime":123456789}
|
||||
*/
|
||||
private static class JsonLogStatement {
|
||||
|
|
|
@ -86,9 +86,9 @@ public class ResourceFlowUtils {
|
|||
|
||||
/**
|
||||
* Create a pending action notification response indicating the resolution of a transfer.
|
||||
* <p>
|
||||
* The returned object will use the id and type of this resource, the trid of the resource's last
|
||||
* transfer request, and the specified status and date.
|
||||
*
|
||||
* <p>The returned object will use the id and type of this resource, the trid of the resource's
|
||||
* last transfer request, and the specified status and date.
|
||||
*/
|
||||
public static PendingActionNotificationResponse createPendingTransferNotificationResponse(
|
||||
EppResource eppResource,
|
||||
|
|
|
@ -16,8 +16,8 @@ package google.registry.flows;
|
|||
|
||||
/**
|
||||
* Marker interface indicating that a {@link Flow} needs to be run transactionally.
|
||||
* <p>
|
||||
* Any flow that mutates the datastore should be tagged with this so that {@link FlowRunner} will
|
||||
*
|
||||
* <p>Any flow that mutates the datastore should be tagged with this so that {@link FlowRunner} will
|
||||
* know how to run it.
|
||||
*/
|
||||
public interface TransactionalFlow {}
|
||||
|
|
|
@ -142,10 +142,10 @@ public abstract class BaseDomainCreateFlow<R extends DomainBase, B extends Build
|
|||
|
||||
/**
|
||||
* Fail the domain or application create very fast if the domain is already registered.
|
||||
* <p>
|
||||
* Try to load the domain non-transactionally, since this can hit memcache. If we succeed, and the
|
||||
* domain is not in the ADD grace period (the only state that allows instantaneous transition to
|
||||
* being deleted), we can assume that the domain will not be deleted (and therefore won't be
|
||||
*
|
||||
* <p>Try to load the domain non-transactionally, since this can hit memcache. If we succeed, and
|
||||
* the domain is not in the ADD grace period (the only state that allows instantaneous transition
|
||||
* to being deleted), we can assume that the domain will not be deleted (and therefore won't be
|
||||
* creatable) until its deletion time. For repeated failed creates this means we can avoid the
|
||||
* datastore lookup, which is very expensive (and first-seen failed creates are no worse than they
|
||||
* otherwise would be). This comes at the cost of the extra lookup for successful creates (or
|
||||
|
|
|
@ -47,8 +47,8 @@ import org.joda.time.DateTime;
|
|||
|
||||
/**
|
||||
* An EPP flow that approves a pending transfer on a {@link DomainResource}.
|
||||
* <p>
|
||||
* The logic in this flow, which handles client approvals, very closely parallels the logic in
|
||||
*
|
||||
* <p>The logic in this flow, which handles client approvals, very closely parallels the logic in
|
||||
* {@link DomainResource#cloneProjectedAtTime} which handles implicit server approvals.
|
||||
*
|
||||
* @error {@link google.registry.flows.domain.DomainFlowUtils.NotAuthorizedForTldException}
|
||||
|
|
|
@ -184,10 +184,10 @@ public class DomainTransferRequestFlow
|
|||
/**
|
||||
* When a transfer is requested, schedule a billing event and poll message for the automatic
|
||||
* approval case.
|
||||
* <p>
|
||||
* Note that the action time is AUTOMATIC_TRANSFER_DAYS in the future, matching the server policy
|
||||
* on automated approval of transfers. There is no equivalent grace period added; if the transfer
|
||||
* is implicitly approved, the resource will project a grace period on itself.
|
||||
*
|
||||
* <p>Note that the action time is AUTOMATIC_TRANSFER_DAYS in the future, matching the server
|
||||
* policy on automated approval of transfers. There is no equivalent grace period added; if the
|
||||
* transfer is implicitly approved, the resource will project a grace period on itself.
|
||||
*/
|
||||
@Override
|
||||
protected Set<Key<? extends TransferServerApproveEntity>> getTransferServerApproveEntities() {
|
||||
|
|
|
@ -18,8 +18,8 @@ import java.lang.reflect.Field;
|
|||
|
||||
/**
|
||||
* A helper that exposes package-private fields in this package for reflective lookup.
|
||||
* <p>
|
||||
* By adding a subclass of this to every package in the model, we can write generic code that can
|
||||
*
|
||||
* <p>By adding a subclass of this to every package in the model, we can write generic code that can
|
||||
* access fields with package private access. The other alternative is to call
|
||||
* {@link Field#setAccessible} with {@code true} on any such Field objects, but that does not work
|
||||
* reliably in Google App Engine cross-package because of its custom security manager
|
||||
|
|
|
@ -32,8 +32,8 @@ public interface Buildable {
|
|||
|
||||
/**
|
||||
* Boilerplate for immutable builders.
|
||||
* <p>
|
||||
* This can be used without implementing {@link Buildable}.
|
||||
*
|
||||
* <p>This can be used without implementing {@link Buildable}.
|
||||
*/
|
||||
public abstract static class Builder<S> {
|
||||
|
||||
|
@ -95,8 +95,8 @@ public interface Buildable {
|
|||
/**
|
||||
* Interface for objects that can produce an "overlay", which means a copy where non-null fields
|
||||
* from another object are copied over, but null fields on the source are not.
|
||||
* <p>
|
||||
* Warning: Do not use {@code emptyToNull} methods in the getters of an {@link Overlayable}! We
|
||||
*
|
||||
* <p>Warning: Do not use {@code emptyToNull} methods in the getters of an {@link Overlayable}! We
|
||||
* use null to mean "skip this field" whereas empty means "set this field to empty", so they are
|
||||
* semantically different.
|
||||
*
|
||||
|
|
|
@ -139,9 +139,9 @@ public final class EppResourceUtils {
|
|||
|
||||
/**
|
||||
* Checks multiple {@link EppResource} objects from the datastore by unique ids.
|
||||
* <p>
|
||||
* There are currently no resources that support checks and do not use foreign keys. If we need to
|
||||
* support that case in the future, we can loosen the type to allow any {@link EppResource} and
|
||||
*
|
||||
* <p>There are currently no resources that support checks and do not use foreign keys. If we need
|
||||
* to support that case in the future, we can loosen the type to allow any {@link EppResource} and
|
||||
* add code to do the lookup by id directly.
|
||||
*
|
||||
* @param clazz the resource type to load
|
||||
|
|
|
@ -213,10 +213,10 @@ public class ModelUtils {
|
|||
|
||||
/**
|
||||
* Returns a map from field names (including non-public and inherited fields) to values.
|
||||
* <p>
|
||||
* This turns arrays into {@link List} objects so that ImmutableObject can more easily use the
|
||||
* returned map in its implementation of {@link ImmutableObject#toString} and
|
||||
* {@link ImmutableObject#equals}, which work by comparing and printing these maps.
|
||||
*
|
||||
* <p>This turns arrays into {@link List} objects so that ImmutableObject can more easily use the
|
||||
* returned map in its implementation of {@link ImmutableObject#toString} and {@link
|
||||
* ImmutableObject#equals}, which work by comparing and printing these maps.
|
||||
*/
|
||||
static Map<String, Object> getFieldValues(Object instance) {
|
||||
// Don't make this ImmutableMap because field values can be null.
|
||||
|
|
|
@ -319,8 +319,8 @@ public abstract class BillingEvent extends ImmutableObject
|
|||
|
||||
/**
|
||||
* A recurring billable event.
|
||||
* <p>
|
||||
* Unlike {@link OneTime} events, these do not store an explicit cost, since the cost of the
|
||||
*
|
||||
* <p>Unlike {@link OneTime} events, these do not store an explicit cost, since the cost of the
|
||||
* recurring event might change and each time we bill for it we need to bill at the current cost,
|
||||
* not the value that was in use at the time the recurrence was created.
|
||||
*/
|
||||
|
@ -346,15 +346,15 @@ public abstract class BillingEvent extends ImmutableObject
|
|||
/**
|
||||
* The eventTime recurs every year on this [month, day, time] between {@link #eventTime} and
|
||||
* {@link #recurrenceEndTime}, inclusive of the start but not of the end.
|
||||
* <p>
|
||||
* This field is denormalized from {@link #eventTime} to allow for an efficient index, but it
|
||||
*
|
||||
* <p>This field is denormalized from {@link #eventTime} to allow for an efficient index, but it
|
||||
* always has the same data as that field.
|
||||
* <p>
|
||||
* Note that this is a recurrence of the event time, not the billing time. The billing time can
|
||||
* be calculated by adding the relevant grace period length to this date. The reason for this
|
||||
* requirement is that the event time recurs on a {@link org.joda.time.Period} schedule (same
|
||||
* day of year, which can be 365 or 366 days later) which is what {@link TimeOfYear} can model,
|
||||
* whereas the billing time is a fixed {@link org.joda.time.Duration} later.
|
||||
*
|
||||
* <p>Note that this is a recurrence of the event time, not the billing time. The billing time
|
||||
* can be calculated by adding the relevant grace period length to this date. The reason for
|
||||
* this requirement is that the event time recurs on a {@link org.joda.time.Period} schedule
|
||||
* (same day of year, which can be 365 or 366 days later) which is what {@link TimeOfYear} can
|
||||
* model, whereas the billing time is a fixed {@link org.joda.time.Duration} later.
|
||||
*/
|
||||
@Index
|
||||
TimeOfYear recurrenceTimeOfYear;
|
||||
|
@ -401,9 +401,9 @@ public abstract class BillingEvent extends ImmutableObject
|
|||
|
||||
/**
|
||||
* An event representing a cancellation of one of the other two billable event types.
|
||||
* <p>
|
||||
* This is implemented as a separate event rather than a bit on BillingEvent in order to preserve
|
||||
* the immutability of billing events.
|
||||
*
|
||||
* <p>This is implemented as a separate event rather than a bit on BillingEvent in order to
|
||||
* preserve the immutability of billing events.
|
||||
*/
|
||||
@Entity
|
||||
public static class Cancellation extends BillingEvent {
|
||||
|
|
|
@ -32,14 +32,14 @@ import java.util.List;
|
|||
|
||||
/**
|
||||
* A time of year (month, day, millis of day) that can be stored in a sort-friendly format.
|
||||
* <p>
|
||||
* This is conceptually similar to {@code MonthDay} in Joda or more generally to Joda's
|
||||
*
|
||||
* <p>This is conceptually similar to {@code MonthDay} in Joda or more generally to Joda's
|
||||
* {@code Partial}, but the parts we need are too simple to justify a full implementation of
|
||||
* {@code Partial}.
|
||||
* <p>
|
||||
* For simplicity, the native representation of this class's data is its stored format. This allows
|
||||
* it to be embeddable with no translation needed and also delays parsing of the string on load
|
||||
* until it's actually needed.
|
||||
*
|
||||
* <p>For simplicity, the native representation of this class's data is its stored format. This
|
||||
* allows it to be embeddable with no translation needed and also delays parsing of the string on
|
||||
* load until it's actually needed.
|
||||
*/
|
||||
@Embed
|
||||
public class TimeOfYear extends ImmutableObject {
|
||||
|
@ -53,8 +53,8 @@ public class TimeOfYear extends ImmutableObject {
|
|||
|
||||
/**
|
||||
* Constructs a {@link TimeOfYear} from a {@link DateTime}.
|
||||
* <p>
|
||||
* This handles leap years in an intentionally peculiar way by always treating February 29 as
|
||||
*
|
||||
* <p>This handles leap years in an intentionally peculiar way by always treating February 29 as
|
||||
* February 28. It is impossible to construct a {@link TimeOfYear} for February 29th.
|
||||
*/
|
||||
public static TimeOfYear fromDateTime(DateTime dateTime) {
|
||||
|
|
|
@ -40,17 +40,17 @@ import java.util.TreeMap;
|
|||
* at a corresponding instant, and remains active until the next transition occurs. At least one
|
||||
* "start of time" value (corresponding to START_OF_TIME, i.e. the Unix epoch) must be provided
|
||||
* so that the property will have a value for all possible times.
|
||||
* <p>
|
||||
* This concept is naturally represented by a sorted map of {@code DateTime} to {@code V}, but
|
||||
* the AppEngine datastore cannot natively represent a map keyed on non-strings. Instead, we
|
||||
* store an ordered list of transitions and use Objectify's @Mapify annotation to automatically
|
||||
* recreate the sorted map on load from the datastore, which is used as a backing map for this
|
||||
* property; the property itself also implements Map by way of extending ForwardingMap, so that
|
||||
* this property can stored directly as the @Mapify field in the entity.
|
||||
* <p>
|
||||
* The type parameter {@code T} specifies a user-defined subclass of {@code TimedTransition<V>} to
|
||||
* use for storing the list of transitions. The user is given this choice of subclass so that the
|
||||
* field of the value type stored in the transition can be given a customized name.
|
||||
*
|
||||
* <p>This concept is naturally represented by a sorted map of {@code DateTime} to {@code V}, but
|
||||
* the AppEngine datastore cannot natively represent a map keyed on non-strings. Instead, we store
|
||||
* an ordered list of transitions and use Objectify's @Mapify annotation to automatically recreate
|
||||
* the sorted map on load from the datastore, which is used as a backing map for this property; the
|
||||
* property itself also implements Map by way of extending ForwardingMap, so that this property can
|
||||
* stored directly as the @Mapify field in the entity.
|
||||
*
|
||||
* <p>The type parameter {@code T} specifies a user-defined subclass of {@code TimedTransition<V>}
|
||||
* to use for storing the list of transitions. The user is given this choice of subclass so that
|
||||
* the field of the value type stored in the transition can be given a customized name.
|
||||
*/
|
||||
public class TimedTransitionProperty<V, T extends TimedTransitionProperty.TimedTransition<V>>
|
||||
extends ForwardingMap<DateTime, T> {
|
||||
|
@ -61,11 +61,11 @@ public class TimedTransitionProperty<V, T extends TimedTransitionProperty.TimedT
|
|||
* and implementations of the abstract getter and setter methods to access that field. This design
|
||||
* is so that subclasses tagged with @Embed can define a custom field name for their value, for
|
||||
* the purpose of backwards compatibility and better readability of the datastore representation.
|
||||
* <p>
|
||||
* The public visibility of this class exists only so that it can be subclassed; clients should
|
||||
* never call any methods on this class or attempt to access its members, but should instead
|
||||
* treat it as a customizable implementation detail of {@code TimedTransitionProperty}. However,
|
||||
* note that subclasses must also have public visibility so that they can be instantiated via
|
||||
*
|
||||
* <p>The public visibility of this class exists only so that it can be subclassed; clients should
|
||||
* never call any methods on this class or attempt to access its members, but should instead treat
|
||||
* it as a customizable implementation detail of {@code TimedTransitionProperty}. However, note
|
||||
* that subclasses must also have public visibility so that they can be instantiated via
|
||||
* reflection in a call to {@code fromValueMap}.
|
||||
*/
|
||||
public abstract static class TimedTransition<V> extends ImmutableObject {
|
||||
|
@ -79,7 +79,7 @@ public class TimedTransitionProperty<V, T extends TimedTransitionProperty.TimedT
|
|||
protected abstract void setValue(V value);
|
||||
}
|
||||
|
||||
/** Mapper for use with @Mapify; extracts the time from a TimedTransition to use it as a key. */
|
||||
/** Mapper used with @Mapify extracting time from TimedTransition to use as key. */
|
||||
public static class TimeMapper implements Mapper<DateTime, TimedTransition<?>> {
|
||||
@Override
|
||||
public DateTime getKey(TimedTransition<?> transition) {
|
||||
|
@ -118,8 +118,8 @@ public class TimedTransitionProperty<V, T extends TimedTransitionProperty.TimedT
|
|||
/**
|
||||
* Returns a new immutable {@code TimedTransitionProperty} representing the given map of DateTime
|
||||
* to value, with transitions constructed using the given {@code TimedTransition} subclass.
|
||||
* <p>
|
||||
* This method should be the normal method for constructing a {@TimedTransitionProperty}.
|
||||
*
|
||||
* <p>This method should be the normal method for constructing a {@link TimedTransitionProperty}.
|
||||
*/
|
||||
public static <V, T extends TimedTransition<V>> TimedTransitionProperty<V, T> fromValueMap(
|
||||
ImmutableSortedMap<DateTime, V> valueMap,
|
||||
|
@ -131,10 +131,11 @@ public class TimedTransitionProperty<V, T extends TimedTransitionProperty.TimedT
|
|||
/**
|
||||
* Returns a new mutable {@code TimedTransitionProperty} representing the given map of DateTime
|
||||
* to value, with transitions constructed using the given {@code TimedTransition} subclass.
|
||||
* <p>
|
||||
* This method should only be used for initializing fields that are declared with the @Mapify
|
||||
* annotation. The map for those fields must be mutable so that Objectify can load values from
|
||||
* the datastore into the map, but clients should still never mutate the field's map directly.
|
||||
*
|
||||
* <p>This method should only be used for initializing fields that are declared with the
|
||||
* @Mapify annotation. The map for those fields must be mutable so that Objectify can load values
|
||||
* from the datastore into the map, but clients should still never mutate the field's map
|
||||
* directly.
|
||||
*/
|
||||
public static <V, T extends TimedTransition<V>> TimedTransitionProperty<V, T> forMapify(
|
||||
ImmutableSortedMap<DateTime, V> valueMap,
|
||||
|
@ -147,10 +148,10 @@ public class TimedTransitionProperty<V, T extends TimedTransitionProperty.TimedT
|
|||
* Returns a new mutable {@code TimedTransitionProperty} representing the given value being set at
|
||||
* start of time, constructed using the given {@code TimedTransition} subclass.
|
||||
*
|
||||
* <p>
|
||||
* This method should only be used for initializing fields that are declared with the @Mapify
|
||||
* annotation. The map for those fields must be mutable so that Objectify can load values from the
|
||||
* datastore into the map, but clients should still never mutate the field's map directly.
|
||||
* <p>This method should only be used for initializing fields that are declared with the
|
||||
* @Mapify annotation. The map for those fields must be mutable so that Objectify can load values
|
||||
* from the datastore into the map, but clients should still never mutate the field's map
|
||||
* directly.
|
||||
*/
|
||||
public static <V, T extends TimedTransition<V>> TimedTransitionProperty<V, T> forMapify(
|
||||
V valueAtStartOfTime, Class<T> timedTransitionSubclass) {
|
||||
|
|
|
@ -20,12 +20,13 @@ import google.registry.model.eppcommon.Address;
|
|||
|
||||
/**
|
||||
* EPP Contact Address
|
||||
* <p>
|
||||
* This class is embedded inside the {@link PostalInfo} of an EPP contact to hold its address. The
|
||||
* fields are all defined in parent class {@link Address}, but the subclass is still necessary to
|
||||
* pick up the contact namespace.
|
||||
* <p>
|
||||
* This does not implement {@code Overlayable} because it is intended to be bulk replaced on update.
|
||||
*
|
||||
* <p>This class is embedded inside the {@link PostalInfo} of an EPP contact to hold its
|
||||
* address. The fields are all defined in parent class {@link Address}, but the subclass is still
|
||||
* necessary to pick up the contact namespace.
|
||||
*
|
||||
* <p>This does not implement {@code Overlayable} because it is intended to be bulk replaced on
|
||||
* update.
|
||||
*
|
||||
* @see PostalInfo
|
||||
*/
|
||||
|
|
|
@ -120,10 +120,10 @@ public class ContactCommand {
|
|||
implements SingleResourceCommand, ResourceCreateOrChange<ContactResource.Builder> {
|
||||
/**
|
||||
* Unique identifier for this contact.
|
||||
* <p>
|
||||
* This is only unique in the sense that for any given lifetime specified as the time range from
|
||||
* (creationTime, deletionTime) there can only be one contact in the datastore with this id.
|
||||
* However, there can be many contacts with the same id and non-overlapping lifetimes.
|
||||
*
|
||||
* <p>This is only unique in the sense that for any given lifetime specified as the time range
|
||||
* from (creationTime, deletionTime) there can only be one contact in the datastore with this
|
||||
* id. However, there can be many contacts with the same id and non-overlapping lifetimes.
|
||||
*/
|
||||
@XmlElement(name = "id")
|
||||
String contactId;
|
||||
|
|
|
@ -20,10 +20,10 @@ import google.registry.model.eppcommon.PhoneNumber;
|
|||
|
||||
/**
|
||||
* EPP Contact Phone Number
|
||||
* <p>
|
||||
* This class is embedded inside a {@link ContactResource} hold the phone number of an EPP contact.
|
||||
* The fields are all defined in the parent class {@link PhoneNumber}, but the subclass is still
|
||||
* necessary to pick up the contact namespace.
|
||||
*
|
||||
* <p>This class is embedded inside a {@link ContactResource} hold the phone number of an EPP
|
||||
* contact. The fields are all defined in the parent class {@link PhoneNumber}, but the subclass is
|
||||
* still necessary to pick up the contact namespace.
|
||||
*
|
||||
* @see ContactResource
|
||||
*/
|
||||
|
|
|
@ -69,9 +69,9 @@ public class ContactResource extends EppResource implements ForeignKeyedEppResou
|
|||
|
||||
/**
|
||||
* Unique identifier for this contact.
|
||||
* <p>
|
||||
* This is only unique in the sense that for any given lifetime specified as the time range from
|
||||
* (creationTime, deletionTime) there can only be one contact in the datastore with this id.
|
||||
*
|
||||
* <p>This is only unique in the sense that for any given lifetime specified as the time range
|
||||
* from (creationTime, deletionTime) there can only be one contact in the datastore with this id.
|
||||
* However, there can be many contacts with the same id and non-overlapping lifetimes.
|
||||
*/
|
||||
@XmlTransient
|
||||
|
@ -153,8 +153,8 @@ public class ContactResource extends EppResource implements ForeignKeyedEppResou
|
|||
|
||||
/**
|
||||
* Postal info for the contact.
|
||||
* <p>
|
||||
* The XML marshalling expects the {@link PostalInfo} objects in a list, but we can't actually
|
||||
*
|
||||
* <p>The XML marshalling expects the {@link PostalInfo} objects in a list, but we can't actually
|
||||
* persist them to datastore that way because Objectify can't handle collections of embedded
|
||||
* objects that themselves contain collections, and there's a list of streets inside. This method
|
||||
* transforms the persisted format to the XML format for marshalling.
|
||||
|
|
|
@ -59,9 +59,9 @@ public abstract class DomainBase extends EppResource {
|
|||
|
||||
/**
|
||||
* Fully qualified domain name (puny-coded), which serves as the foreign key for this domain.
|
||||
* <p>
|
||||
* This is only unique in the sense that for any given lifetime specified as the time range from
|
||||
* (creationTime, deletionTime) there can only be one domain in the datastore with this name.
|
||||
*
|
||||
* <p>This is only unique in the sense that for any given lifetime specified as the time range
|
||||
* from (creationTime, deletionTime) there can only be one domain in the datastore with this name.
|
||||
* However, there can be many domains with the same name and non-overlapping lifetimes.
|
||||
*
|
||||
* @invariant fullyQualifiedDomainName == fullyQualifiedDomainName.toLowerCase()
|
||||
|
@ -83,8 +83,8 @@ public abstract class DomainBase extends EppResource {
|
|||
|
||||
/**
|
||||
* Associated contacts for the domain (other than registrant).
|
||||
* <p>
|
||||
* This field is marked with {@literal @}Ignore so that {@link DomainBase} subclasses won't
|
||||
*
|
||||
* <p>This field is marked with {@literal @}Ignore so that {@link DomainBase} subclasses won't
|
||||
* persist it. Instead, the data in this field and in the {@link #registrant} are both stored in
|
||||
* {@link DomainBase#allContacts} to allow for more efficient queries.
|
||||
*/
|
||||
|
@ -101,10 +101,10 @@ public abstract class DomainBase extends EppResource {
|
|||
|
||||
/**
|
||||
* A reference to the registrant who registered this domain.
|
||||
* <p>
|
||||
* This field is marked with {@literal @}Ignore so that {@link DomainBase} subclasses won't
|
||||
* persist it. Instead, the data in this field and in the {@link DomainBase#contacts} are
|
||||
* both stored in {@link DomainBase#allContacts} to allow for more efficient queries.
|
||||
*
|
||||
* <p>This field is marked with {@literal @}Ignore so that {@link DomainBase} subclasses won't
|
||||
* persist it. Instead, the data in this field and in the {@link DomainBase#contacts} are both
|
||||
* stored in {@link DomainBase#allContacts} to allow for more efficient queries.
|
||||
*/
|
||||
@Ignore
|
||||
//TODO(b/28713909): Make this a Ref<ContactResource>.
|
||||
|
@ -115,8 +115,8 @@ public abstract class DomainBase extends EppResource {
|
|||
|
||||
/**
|
||||
* Data used to construct DS records for this domain.
|
||||
* <p>
|
||||
* This is {@literal @}XmlTransient because it needs to be returned under the "extension" tag
|
||||
*
|
||||
* <p>This is {@literal @}XmlTransient because it needs to be returned under the "extension" tag
|
||||
* of an info response rather than inside the "infData" tag.
|
||||
*/
|
||||
@XmlTransient
|
||||
|
|
|
@ -445,9 +445,9 @@ public class DomainCommand {
|
|||
|
||||
/**
|
||||
* Creates a copy of this {@link Update} with hard links to hosts and contacts.
|
||||
* <p>
|
||||
* As a side effect, this will turn null innerAdd/innerRemove/innerChange into empty versions of
|
||||
* those classes, which is harmless because the getters do that anyways.
|
||||
*
|
||||
* <p>As a side effect, this will turn null innerAdd/innerRemove/innerChange into empty versions
|
||||
* of those classes, which is harmless because the getters do that anyways.
|
||||
*/
|
||||
@Override
|
||||
public Update cloneAndLinkReferences(DateTime now) throws InvalidReferencesException {
|
||||
|
|
|
@ -100,8 +100,8 @@ public class DomainResource extends DomainBase implements ForeignKeyedEppResourc
|
|||
|
||||
/**
|
||||
* The poll message associated with this domain being deleted.
|
||||
* <p>
|
||||
* This field should be null if the domain is not in pending delete. If it is, the field should
|
||||
*
|
||||
* <p>This field should be null if the domain is not in pending delete. If it is, the field should
|
||||
* refer to a {@link PollMessage} timed to when the domain is fully deleted. If the domain is
|
||||
* restored, the message should be deleted.
|
||||
*/
|
||||
|
@ -110,9 +110,9 @@ public class DomainResource extends DomainBase implements ForeignKeyedEppResourc
|
|||
|
||||
/**
|
||||
* The recurring billing event associated with this domain's autorenewals.
|
||||
* <p>
|
||||
* The recurrence should be open ended unless the domain is in pending delete or fully deleted, in
|
||||
* which case it should be closed at the time the delete was requested. Whenever the domain's
|
||||
*
|
||||
* <p>The recurrence should be open ended unless the domain is in pending delete or fully deleted,
|
||||
* in which case it should be closed at the time the delete was requested. Whenever the domain's
|
||||
* {@link #registrationExpirationTime} is changed the recurrence should be closed, a new one
|
||||
* should be created, and this field should be updated to point to the new one.
|
||||
*/
|
||||
|
@ -121,9 +121,9 @@ public class DomainResource extends DomainBase implements ForeignKeyedEppResourc
|
|||
|
||||
/**
|
||||
* The recurring poll message associated with this domain's autorenewals.
|
||||
* <p>
|
||||
* The recurrence should be open ended unless the domain is in pending delete or fully deleted, in
|
||||
* which case it should be closed at the time the delete was requested. Whenever the domain's
|
||||
*
|
||||
* <p>The recurrence should be open ended unless the domain is in pending delete or fully deleted,
|
||||
* in which case it should be closed at the time the delete was requested. Whenever the domain's
|
||||
* {@link #registrationExpirationTime} is changed the recurrence should be closed, a new one
|
||||
* should be created, and this field should be updated to point to the new one.
|
||||
*/
|
||||
|
@ -206,8 +206,8 @@ public class DomainResource extends DomainBase implements ForeignKeyedEppResourc
|
|||
|
||||
/**
|
||||
* Returns the Registry Grace Period Statuses for this domain.
|
||||
* <p>
|
||||
* This collects all statuses from the domain's {@link GracePeriod}s and also adds the
|
||||
*
|
||||
* <p>This collects all statuses from the domain's {@link GracePeriod} entries and also adds the
|
||||
* PENDING_DELETE status if needed.
|
||||
*/
|
||||
public ImmutableSet<GracePeriodStatus> getGracePeriodStatuses() {
|
||||
|
|
|
@ -30,9 +30,9 @@ import javax.annotation.Nullable;
|
|||
|
||||
/**
|
||||
* A domain grace period with an expiration time.
|
||||
* <p>
|
||||
* When a grace period expires, it is lazily removed from the {@link DomainResource} the next time
|
||||
* the resource is loaded from the datastore.
|
||||
*
|
||||
* <p>When a grace period expires, it is lazily removed from the {@link DomainResource} the next
|
||||
* time the resource is loaded from the datastore.
|
||||
*/
|
||||
@Embed
|
||||
public class GracePeriod extends ImmutableObject {
|
||||
|
|
|
@ -28,8 +28,8 @@ import javax.xml.bind.annotation.adapters.XmlAdapter;
|
|||
/**
|
||||
* Legacy shell of a "union" type to represent referenced objects as either a foreign key or as a
|
||||
* link to another object in the datastore. In its current form it merely wraps a {@link Ref}.
|
||||
* <p>
|
||||
* This type always marshals as the "foreign key". We no longer use this type for unmarshalling.
|
||||
*
|
||||
* <p>This type always marshals as the "foreign key". We no longer use this type for unmarshalling.
|
||||
*
|
||||
* @param <T> the type being referenced
|
||||
*/
|
||||
|
|
|
@ -25,9 +25,9 @@ import javax.xml.bind.annotation.XmlRootElement;
|
|||
/**
|
||||
* An XML data object that represents an allocate extension that will be present on EPP commands to
|
||||
* allocate a domain from an application.
|
||||
* <p>
|
||||
* This object holds XML data which JAXB will unmarshal from an EPP domain create command extension.
|
||||
* The XML will have the following enclosing structure:
|
||||
*
|
||||
* <p>This object holds XML data which JAXB will unmarshal from an EPP domain create command
|
||||
* extension. The XML will have the following enclosing structure:
|
||||
*
|
||||
* <pre> {@code
|
||||
* <epp>
|
||||
|
|
|
@ -32,8 +32,8 @@ public class BaseFeeCommand extends ImmutableObject {
|
|||
|
||||
/**
|
||||
* The magnitude of the fee, in the specified units, with an optional description.
|
||||
* <p>
|
||||
* This is a list because a single operation can involve multiple fees.
|
||||
*
|
||||
* <p>This is a list because a single operation can involve multiple fees.
|
||||
*/
|
||||
@XmlElement(name = "fee")
|
||||
List<Fee> fees;
|
||||
|
|
|
@ -34,8 +34,8 @@ public class BaseFeeCommandResponse extends ImmutableObject {
|
|||
|
||||
/**
|
||||
* The magnitude of the fee, in the specified units, with an optional description.
|
||||
* <p>
|
||||
* This is a list because a single operation can involve multiple fees.
|
||||
*
|
||||
* <p>This is a list because a single operation can involve multiple fees.
|
||||
*/
|
||||
List<Fee> fee;
|
||||
|
||||
|
|
|
@ -43,15 +43,15 @@ public class BaseFeeResponse extends ImmutableObject {
|
|||
|
||||
/**
|
||||
* The magnitude of the fee, in the specified units, with an optional description.
|
||||
* <p>
|
||||
* This is a list because a single operation can involve multiple fees.
|
||||
*
|
||||
* <p>This is a list because a single operation can involve multiple fees.
|
||||
*/
|
||||
List<Fee> fee;
|
||||
|
||||
/**
|
||||
* The type of the fee.
|
||||
* <p>
|
||||
* We will use "premium" for fees on premium names, and omit the field otherwise.
|
||||
*
|
||||
* <p>We will use "premium" for fees on premium names, and omit the field otherwise.
|
||||
*/
|
||||
@XmlElement(name = "class")
|
||||
String feeClass;
|
||||
|
|
|
@ -39,8 +39,8 @@ public class FeeDeleteResponseExtension extends ImmutableObject implements Respo
|
|||
|
||||
/**
|
||||
* The magnitude of the credit(s), in the specified units, with an optional description.
|
||||
* <p>
|
||||
* This is a list because a single delete can receive multiple credits.
|
||||
*
|
||||
* <p>This is a list because a single delete can receive multiple credits.
|
||||
*/
|
||||
@XmlElement(name = "credit")
|
||||
List<Credit> credits;
|
||||
|
|
|
@ -24,13 +24,13 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
|||
|
||||
/**
|
||||
* Represents the EPP application status.
|
||||
* <p>
|
||||
* These values are never read from a command and only used in responses, so, we don't need to model
|
||||
* anything we don't output. We don't model the CUSTOM status because we don't use it. This allows
|
||||
* us to also avoid modeling the "name" attribute which is only used with CUSTOM. We don't model the
|
||||
* "lang" attribute because we only support English and that's the default.
|
||||
* <p>
|
||||
* Given all of this, we can use {@link EnumToAttributeAdapter} to make this code very simple.
|
||||
*
|
||||
* <p>These values are never read from a command and only used in responses, so, we don't need to
|
||||
* model anything we don't output. We don't model the CUSTOM status because we don't use it. This
|
||||
* allows us to also avoid modeling the "name" attribute which is only used with CUSTOM. We don't
|
||||
* model the "lang" attribute because we only support English and that's the default.
|
||||
*
|
||||
* <p>Given all of this, we can use {@link EnumToAttributeAdapter} to make this code very simple.
|
||||
*
|
||||
* @see "http://tools.ietf.org/html/draft-tan-epp-launchphase-11#section-2.3"
|
||||
*/
|
||||
|
|
|
@ -26,9 +26,9 @@ import javax.xml.bind.annotation.XmlRootElement;
|
|||
/**
|
||||
* An XML data object that represents a launch extension that may be present on EPP domain check
|
||||
* commands.
|
||||
* <p>
|
||||
* This object holds XML data which JAXB will unmarshal from an EPP domain check command extension.
|
||||
* The XML will have the following enclosing structure:
|
||||
*
|
||||
* <p>This object holds XML data which JAXB will unmarshal from an EPP domain check command
|
||||
* extension. The XML will have the following enclosing structure:
|
||||
*
|
||||
* <pre> {@code
|
||||
* <epp>
|
||||
|
|
|
@ -34,9 +34,9 @@ import javax.xml.bind.annotation.XmlRootElement;
|
|||
/**
|
||||
* An XML data object that represents a launch extension that may be present on EPP domain create
|
||||
* commands.
|
||||
* <p>
|
||||
* This object holds XML data which JAXB will unmarshal from an EPP domain create command extension.
|
||||
* The XML will have the following enclosing structure:
|
||||
*
|
||||
* <p>This object holds XML data which JAXB will unmarshal from an EPP domain create command
|
||||
* extension. The XML will have the following enclosing structure:
|
||||
*
|
||||
* <pre> {@code
|
||||
* <epp>
|
||||
|
|
|
@ -34,8 +34,8 @@ import javax.xml.bind.annotation.XmlValue;
|
|||
|
||||
/**
|
||||
* The launch phase of the TLD being addressed by this command.
|
||||
* <p>
|
||||
* The launch phase refers to the various stages that a TLD goes through before entering general
|
||||
*
|
||||
* <p>The launch phase refers to the various stages that a TLD goes through before entering general
|
||||
* availability. The various phases are described below (in order that they usually occur).
|
||||
*/
|
||||
@Embed
|
||||
|
|
|
@ -32,8 +32,9 @@ import javax.xml.bind.annotation.XmlType;
|
|||
public class SecDnsCreateExtension extends ImmutableObject implements CommandExtension {
|
||||
/**
|
||||
* Time in seconds until the signature should expire.
|
||||
* <p>
|
||||
* We do not support expirations, but we need this field to be able to return appropriate errors.
|
||||
*
|
||||
* <p>We do not support expirations, but we need this field to be able to return appropriate
|
||||
* errors.
|
||||
*/
|
||||
Long maxSigLife;
|
||||
|
||||
|
|
|
@ -36,8 +36,8 @@ public class SecDnsUpdateExtension extends ImmutableObject implements CommandExt
|
|||
|
||||
/**
|
||||
* Specifies whether this update is urgent.
|
||||
* <p>
|
||||
* We don't support urgent updates but we need this to be present to provide appropriate error
|
||||
*
|
||||
* <p>We don't support urgent updates but we need this to be present to provide appropriate error
|
||||
* messages if a client requests it.
|
||||
*/
|
||||
@XmlAttribute
|
||||
|
@ -98,8 +98,8 @@ public class SecDnsUpdateExtension extends ImmutableObject implements CommandExt
|
|||
public static class Change extends ImmutableObject {
|
||||
/**
|
||||
* Time in seconds until the signature should expire.
|
||||
* <p>
|
||||
* We do not support expirations, but we need this field to be able to return appropriate
|
||||
*
|
||||
* <p>We do not support expirations, but we need this field to be able to return appropriate
|
||||
* errors.
|
||||
*/
|
||||
Long maxSigLife;
|
||||
|
|
|
@ -36,8 +36,8 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
|||
|
||||
/**
|
||||
* Container for generic street address.
|
||||
* <p>
|
||||
* This is the "addrType" type from {@link "http://tools.ietf.org/html/rfc5733"}. It also matches
|
||||
*
|
||||
* <p>This is the "addrType" type from {@link "http://tools.ietf.org/html/rfc5733"}. It also matches
|
||||
* the "addrType" type from {@link "http://tools.ietf.org/html/draft-lozano-tmch-smd"}.
|
||||
*
|
||||
* @see google.registry.model.contact.ContactAddress
|
||||
|
|
|
@ -29,8 +29,8 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
|||
|
||||
/**
|
||||
* The "authInfoType" complex type.
|
||||
* <p>
|
||||
* RFCs 5731 and 5732 define this almost identically up to the namespace.
|
||||
*
|
||||
* <p>RFCs 5731 and 5732 define this almost identically up to the namespace.
|
||||
*/
|
||||
@XmlTransient
|
||||
public abstract class AuthInfo extends ImmutableObject {
|
||||
|
|
|
@ -29,12 +29,12 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
|||
|
||||
/**
|
||||
* Container for generic E164 phone number.
|
||||
* <p>
|
||||
* This is the "e164" type from {@link "http://tools.ietf.org/html/rfc5733"}. It also matches the
|
||||
*
|
||||
* <p>This is the "e164" type from {@link "http://tools.ietf.org/html/rfc5733"}. It also matches the
|
||||
* "e164Type" type from {@link "http://tools.ietf.org/html/draft-lozano-tmch-smd"}.
|
||||
*
|
||||
* <blockquote><p>
|
||||
* "Contact telephone number structure is derived from structures defined in [ITU.E164.2005].
|
||||
* <blockquote>
|
||||
* <p>"Contact telephone number structure is derived from structures defined in [ITU.E164.2005].
|
||||
* Telephone numbers described in this mapping are character strings that MUST begin with a plus
|
||||
* sign ("+", ASCII value 0x002B), followed by a country code defined in [ITU.E164.2005], followed
|
||||
* by a dot (".", ASCII value 0x002E), followed by a sequence of digits representing the telephone
|
||||
|
|
|
@ -24,8 +24,8 @@ import javax.xml.bind.annotation.XmlTransient;
|
|||
|
||||
/**
|
||||
* Used as the value of a tag that is present in the XML but has no children or value.
|
||||
* <p>
|
||||
* When placed in a field "foo", this will correctly unmarshal from both {@code <foo/>} and
|
||||
*
|
||||
* <p>When placed in a field "foo", this will correctly unmarshal from both {@code <foo/>} and
|
||||
* {@code <foo></foo>}, and will unmarshal always to {@code <foo/>}.
|
||||
*/
|
||||
@Embed
|
||||
|
|
|
@ -14,8 +14,8 @@
|
|||
|
||||
/**
|
||||
* Domain Registry datastore model common/shared classes.
|
||||
* <p>
|
||||
* This package is intended to hold classes which are shared across multiple XML namespaces. As
|
||||
*
|
||||
* <p>This package is intended to hold classes which are shared across multiple XML namespaces. As
|
||||
* such, no default namespace is declared in this package, and all objects in this package should be
|
||||
* declared XmlTransient.
|
||||
*/
|
||||
|
|
|
@ -40,11 +40,11 @@ public interface ResourceCommand {
|
|||
|
||||
/**
|
||||
* A command for a single {@link EppResource}.
|
||||
* <p>
|
||||
* In general commands should extend {@link AbstractSingleResourceCommand} instead of
|
||||
* implementing this directly, but "Create" commands can't do that since they need to inherit
|
||||
* from a base class that gives them all of the resource's fields. The domain "Info" command
|
||||
* also can't do that since it's "name" field is overloaded with a "hosts" attribute.
|
||||
*
|
||||
* <p>In general commands should extend {@link AbstractSingleResourceCommand} instead of
|
||||
* implementing this directly, but "Create" commands can't do that since they need to inherit from
|
||||
* a base class that gives them all of the resource's fields. The domain "Info" command also can't
|
||||
* do that since it's "name" field is overloaded with a "hosts" attribute.
|
||||
*/
|
||||
public interface SingleResourceCommand extends ResourceCommand {
|
||||
String getTargetId();
|
||||
|
|
|
@ -71,9 +71,9 @@ public abstract class CheckData extends ImmutableObject implements ResponseData
|
|||
|
||||
/**
|
||||
* The "checkNameType" and "checkIDType" types.
|
||||
* <p>
|
||||
* Although these are specified in the Epp extension RFCs and not in RFC 5730, which implies that
|
||||
* they should be implemented per-extension, all of RFCs 5731, 5732 and 5733 define them
|
||||
*
|
||||
* <p>Although these are specified in the Epp extension RFCs and not in RFC 5730, which implies
|
||||
* that they should be implemented per-extension, all of RFCs 5731, 5732 and 5733 define them
|
||||
* identically except for the namespace and some slightly renamed fields, allowing us to share
|
||||
* some code between the different extensions.
|
||||
*/
|
||||
|
|
|
@ -30,8 +30,9 @@ import javax.xml.bind.annotation.XmlElementWrapper;
|
|||
|
||||
/**
|
||||
* A greeting, defined in {@link "http://tools.ietf.org/html/rfc5730"}.
|
||||
* <p>
|
||||
* It would be nice to make this a singleton, but we need the {@link #svDate} field to stay current.
|
||||
*
|
||||
* <p>It would be nice to make this a singleton, but we need the {@link #svDate} field to stay
|
||||
* current.
|
||||
*/
|
||||
public class Greeting extends ImmutableObject implements ResponseOrGreeting {
|
||||
|
||||
|
|
|
@ -79,16 +79,16 @@ public class Response extends ImmutableObject implements ResponseOrGreeting {
|
|||
|
||||
/**
|
||||
* The time the command that created this response was executed.
|
||||
* <p>
|
||||
* This is for logging purposes only and is not returned to the user.
|
||||
*
|
||||
* <p>This is for logging purposes only and is not returned to the user.
|
||||
*/
|
||||
@XmlTransient
|
||||
DateTime executionTime;
|
||||
|
||||
/**
|
||||
* The repository id of a new object if this is a create response, or null.
|
||||
* <p>
|
||||
* This is for logging purposes only and is not returned to the user.
|
||||
*
|
||||
* <p>This is for logging purposes only and is not returned to the user.
|
||||
*/
|
||||
@XmlTransient
|
||||
String createdRepoId;
|
||||
|
|
|
@ -74,9 +74,9 @@ public class HostResource extends EppResource implements ForeignKeyedEppResource
|
|||
|
||||
/**
|
||||
* Fully qualified hostname, which is a unique identifier for this host.
|
||||
* <p>
|
||||
* This is only unique in the sense that for any given lifetime specified as the time range from
|
||||
* (creationTime, deletionTime) there can only be one host in the datastore with this name.
|
||||
*
|
||||
* <p>This is only unique in the sense that for any given lifetime specified as the time range
|
||||
* from (creationTime, deletionTime) there can only be one host in the datastore with this name.
|
||||
* However, there can be many hosts with the same name and non-overlapping lifetimes.
|
||||
*/
|
||||
// TODO(b/25644770): Backfill this index. Until that's done, don't rely on it!
|
||||
|
|
|
@ -27,8 +27,8 @@ import javax.xml.bind.annotation.XmlRootElement;
|
|||
|
||||
/**
|
||||
* Information about one or more marks.
|
||||
* <p>
|
||||
* A mark is a term for a label with some sort of legally protected status. The most well known
|
||||
*
|
||||
* <p>A mark is a term for a label with some sort of legally protected status. The most well known
|
||||
* version is a registered trademark, but marks can also be derived from court opinions, treaties,
|
||||
* or statutes.
|
||||
*/
|
||||
|
|
|
@ -18,10 +18,10 @@ import google.registry.model.eppcommon.Address;
|
|||
|
||||
/**
|
||||
* Mark Holder/Owner Address
|
||||
* <p>
|
||||
* This class is embedded inside {@link CommonMarkContactFields} hold the address of a mark contact
|
||||
* or holder. The fields are all defined in parent class {@link Address}, but the subclass is still
|
||||
* necessary to pick up the mark namespace.
|
||||
*
|
||||
* <p>This class is embedded inside {@link CommonMarkContactFields} hold the address of a mark
|
||||
* contact or holder. The fields are all defined in parent class {@link Address}, but the subclass
|
||||
* is still necessary to pick up the mark namespace.
|
||||
*
|
||||
* @see CommonMarkContactFields
|
||||
*/
|
||||
|
|
|
@ -18,8 +18,8 @@ import google.registry.model.eppcommon.PhoneNumber;
|
|||
|
||||
/**
|
||||
* Mark Holder/Owner Phone Number
|
||||
* <p>
|
||||
* This class is embedded inside {@link CommonMarkContactFields} hold the phone number of a mark
|
||||
*
|
||||
* <p>This class is embedded inside {@link CommonMarkContactFields} hold the phone number of a mark
|
||||
* contact or holder. The fields are all defined in parent class {@link PhoneNumber}, but the
|
||||
* subclass is still necessary to pick up the mark namespace.
|
||||
*
|
||||
|
|
|
@ -60,10 +60,10 @@ import javax.inject.Inject;
|
|||
|
||||
/**
|
||||
* A wrapper around ofy().
|
||||
* <p>
|
||||
* The primary purpose of this class is to add functionality to support commit logs. It is simpler
|
||||
* to wrap {@link Objectify} rather than extend it because this way we can remove some methods that
|
||||
* we don't really want exposed and add some shortcuts.
|
||||
*
|
||||
* <p>The primary purpose of this class is to add functionality to support commit logs. It is
|
||||
* simpler to wrap {@link Objectify} rather than extend it because this way we can remove some
|
||||
* methods that we don't really want exposed and add some shortcuts.
|
||||
*/
|
||||
public class Ofy {
|
||||
|
||||
|
@ -71,10 +71,10 @@ public class Ofy {
|
|||
|
||||
/**
|
||||
* Recommended memcache expiration time, which is one hour, specified in seconds.
|
||||
* <p>
|
||||
* This value should used as a cache expiration time for any entities annotated with an Objectify
|
||||
* {@code @Cache} annotation, to put an upper bound on unlikely-but-possible divergence between
|
||||
* memcache and datastore when a memcache write fails.
|
||||
*
|
||||
* <p>This value should used as a cache expiration time for any entities annotated with an
|
||||
* Objectify {@code @Cache} annotation, to put an upper bound on unlikely-but-possible divergence
|
||||
* between memcache and datastore when a memcache write fails.
|
||||
*/
|
||||
public static final int RECOMMENDED_MEMCACHE_EXPIRATION = 3600;
|
||||
|
||||
|
@ -181,8 +181,8 @@ public class Ofy {
|
|||
|
||||
/**
|
||||
* Save, without any augmentations except to check that we're not saving any virtual entities.
|
||||
* <p>
|
||||
* No backups get written.
|
||||
*
|
||||
* <p>No backups get written.
|
||||
*/
|
||||
public Saver saveWithoutBackup() {
|
||||
return new AugmentedSaver() {
|
||||
|
|
|
@ -32,15 +32,15 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
|||
/**
|
||||
* This package defines all entities which are managed via EPP XML and persisted to the Datastore
|
||||
* via Objectify.
|
||||
* <p>
|
||||
* All first class entities are represented as a "Resource" class - {@link DomainResource},
|
||||
*
|
||||
* <p>All first class entities are represented as a "Resource" class - {@link DomainResource},
|
||||
* {@link HostResource}, {@link ContactResource}, and {@link RegistrarResource}. Resource objects
|
||||
* are written in a single shared entity group per TLD. All commands that operate on those entities
|
||||
* are grouped in a "Command" class- {@link DomainCommand}, {@link HostCommand},
|
||||
* {@link ContactCommand}. The Resource does double duty as both the persisted representation and as
|
||||
* the XML-marshallable object returned in respond to Info commands.
|
||||
* <p>
|
||||
* Command classes are never persisted, and the Objectify annotations on the Create and Update
|
||||
*
|
||||
* <p>Command classes are never persisted, and the Objectify annotations on the Create and Update
|
||||
* classes are purely for the benefit of the derived Resource classes that inherit from them.
|
||||
* Whenever a command that mutates the model is executed, a HistoryEvent is stored with the affected
|
||||
* Resource as its datastore parent. All history entries have an indexed modification time field so
|
||||
|
|
|
@ -202,8 +202,8 @@ public class Registrar extends ImmutableObject implements Buildable, Jsonifiable
|
|||
/**
|
||||
* Registrar name. This is a distinct from the client identifier since there are no restrictions
|
||||
* on its length.
|
||||
* <p>
|
||||
* NB: We are assuming that this field is unique across all registrar entities. This is not
|
||||
*
|
||||
* <p>NB: We are assuming that this field is unique across all registrar entities. This is not
|
||||
* formally enforced in our datastore, but should be enforced by ICANN in that no two registrars
|
||||
* will be accredited with the same name.
|
||||
*
|
||||
|
|
|
@ -23,9 +23,9 @@ import google.registry.model.eppcommon.Address;
|
|||
|
||||
/**
|
||||
* Registrar Address
|
||||
* <p>
|
||||
* This class is embedded inside a {@link Registrar} object to hold its address. The fields are all
|
||||
* defined in parent class {@link Address} so that it can share it with other similar address
|
||||
*
|
||||
* <p>This class is embedded inside a {@link Registrar} object to hold its address. The fields are
|
||||
* all defined in parent class {@link Address} so that it can share it with other similar address
|
||||
* classes.
|
||||
*/
|
||||
@Embed
|
||||
|
|
|
@ -263,8 +263,8 @@ public class Registry extends ImmutableObject implements Buildable {
|
|||
|
||||
/**
|
||||
* The unicode-aware representation of the TLD associated with this {@link Registry}.
|
||||
* <p>
|
||||
* This will be equal to {@link #tldStr} for ASCII TLDs, but will be non-ASCII for IDN TLDs.
|
||||
*
|
||||
* <p>This will be equal to {@link #tldStr} for ASCII TLDs, but will be non-ASCII for IDN TLDs.
|
||||
* We store this in a field so that it will be retained upon import into BigQuery.
|
||||
*/
|
||||
String tldUnicode;
|
||||
|
@ -348,10 +348,10 @@ public class Registry extends ImmutableObject implements Buildable {
|
|||
/**
|
||||
* A property that transitions to different renew billing costs at different times. Stored as a
|
||||
* list of BillingCostTransition embedded objects using the @Mapify annotation.
|
||||
* <p>
|
||||
* A given value of this property represents the per-year billing cost for renewing a domain name.
|
||||
* This cost is also used to compute costs for transfers, since each transfer includes a renewal
|
||||
* to ensure transfers have a cost.
|
||||
*
|
||||
* <p>A given value of this property represents the per-year billing cost for renewing a domain
|
||||
* name. This cost is also used to compute costs for transfers, since each transfer includes a
|
||||
* renewal to ensure transfers have a cost.
|
||||
*/
|
||||
@Mapify(TimedTransitionProperty.TimeMapper.class)
|
||||
TimedTransitionProperty<Money, BillingCostTransition> renewBillingCostTransitions =
|
||||
|
@ -388,8 +388,8 @@ public class Registry extends ImmutableObject implements Buildable {
|
|||
|
||||
/**
|
||||
* Retrieve the TLD state at the given time. Defaults to {@link TldState#PREDELEGATION}.
|
||||
* <p>
|
||||
* Note that {@link TldState#PDT} TLDs pretend to be in {@link TldState#GENERAL_AVAILABILITY}.
|
||||
*
|
||||
* <p>Note that {@link TldState#PDT} TLDs pretend to be in {@link TldState#GENERAL_AVAILABILITY}.
|
||||
*/
|
||||
public TldState getTldState(DateTime now) {
|
||||
TldState state = tldStateTransitions.getValueAtTime(now);
|
||||
|
@ -703,8 +703,8 @@ public class Registry extends ImmutableObject implements Buildable {
|
|||
|
||||
/**
|
||||
* Sets the renew billing cost to transition to the specified values at the specified times.
|
||||
* <p>
|
||||
* Renew billing costs transitions should only be added at least 5 days (the length of an
|
||||
*
|
||||
* <p>Renew billing costs transitions should only be added at least 5 days (the length of an
|
||||
* automatic transfer) in advance, to avoid discrepancies between the cost stored with the
|
||||
* billing event (created when the transfer is requested) and the cost at the time when the
|
||||
* transfer actually occurs (5 days later).
|
||||
|
|
|
@ -42,8 +42,8 @@ public class ServerSecret extends CrossTldSingleton {
|
|||
|
||||
/**
|
||||
* Get the server secret, creating it if the datastore doesn't have one already.
|
||||
* <p>
|
||||
* There's a tiny risk of a race here if two calls to this happen simultaneously and create
|
||||
*
|
||||
* <p>There's a tiny risk of a race here if two calls to this happen simultaneously and create
|
||||
* different keys, in which case one of the calls will end up with an incorrect key. However, this
|
||||
* happens precisely once in the history of the system (after that it's always in datastore) so
|
||||
* it's not worth worrying about.
|
||||
|
|
|
@ -53,14 +53,14 @@ import java.util.Map;
|
|||
|
||||
/**
|
||||
* Signed Mark Data Revocation List (SMDRL).
|
||||
* <p>
|
||||
* Represents a SMDRL file downloaded from the TMCH MarksDB each day. The list holds the ids of
|
||||
* all the {@link SignedMark SignedMarks} that have been revoked. A new list is created for each
|
||||
* new file that's created, depending on the timestamp.
|
||||
* <p>
|
||||
* We'll be putting the entire table into a single entity for the sake of performance. But in order
|
||||
* to avoid exceeding the one megabyte max entity size limit, we'll also be sharding that entity
|
||||
* into multiple entities, each entity containing {@value #SHARD_SIZE} rows.
|
||||
*
|
||||
* <p>Represents a SMDRL file downloaded from the TMCH MarksDB each day. The list holds the ids of
|
||||
* all the {@link SignedMark SignedMarks} that have been revoked. A new list is created for each new
|
||||
* file that's created, depending on the timestamp.
|
||||
*
|
||||
* <p>We'll be putting the entire table into a single entity for the sake of performance. But in
|
||||
* order to avoid exceeding the one megabyte max entity size limit, we'll also be sharding that
|
||||
* entity into multiple entities, each entity containing {@value #SHARD_SIZE} rows.
|
||||
*
|
||||
* @see google.registry.tmch.SmdrlCsvParser
|
||||
* @see "http://tools.ietf.org/html/draft-lozano-tmch-func-spec-08#section-6.2"
|
||||
|
|
|
@ -49,8 +49,8 @@ public final class TmchCrl extends CrossTldSingleton {
|
|||
|
||||
/**
|
||||
* Change the datastore singleton to a new ASCII-armored X.509 CRL.
|
||||
* <p>
|
||||
* Please do not call this function unless your CRL is properly formatted, signed by the root,
|
||||
*
|
||||
* <p>Please do not call this function unless your CRL is properly formatted, signed by the root,
|
||||
* and actually newer than the one currently in the datastore.
|
||||
*/
|
||||
public static void set(final String crl) {
|
||||
|
|
|
@ -45,42 +45,42 @@ public class TransferData extends BaseTransferObject implements Buildable {
|
|||
|
||||
/**
|
||||
* The billing event and poll messages associated with a server-approved transfer.
|
||||
* <p>
|
||||
* This field should be null if there is not currently a pending transfer or if the object being
|
||||
* transferred is not a domain. If there is a pending transfer for a domain there should be a
|
||||
* number of poll messages and billing events for both the gaining and losing registrars. If the
|
||||
*
|
||||
* <p>This field should be null if there is not currently a pending transfer or if the object
|
||||
* being transferred is not a domain. If there is a pending transfer for a domain there should be
|
||||
* a number of poll messages and billing events for both the gaining and losing registrars. If the
|
||||
* pending transfer is explicitly approved, rejected or cancelled, the referenced entities should
|
||||
* be deleted.
|
||||
* <p>
|
||||
* Keys are stored here instead of references to facilitate bulk deletion (the typical use case,
|
||||
* as described above), since Objectify allows bulk deletion by key but not by reference.
|
||||
*
|
||||
* <p>Keys are stored here instead of references to facilitate bulk deletion (the typical use
|
||||
* case, as described above), since Objectify allows bulk deletion by key but not by reference.
|
||||
*/
|
||||
@IgnoreSave(IfNull.class)
|
||||
Set<Key<? extends TransferServerApproveEntity>> serverApproveEntities;
|
||||
|
||||
/**
|
||||
* The regular one-time billing event that will be charged for a server-approved transfer.
|
||||
* <p>
|
||||
* This field should be null if there is not currently a pending transfer or if the object being
|
||||
* transferred is not a domain.
|
||||
*
|
||||
* <p>This field should be null if there is not currently a pending transfer or if the object
|
||||
* being transferred is not a domain.
|
||||
*/
|
||||
@IgnoreSave(IfNull.class)
|
||||
Ref<BillingEvent.OneTime> serverApproveBillingEvent;
|
||||
|
||||
/**
|
||||
* The autorenew billing event that should be associated with this resource after the transfer.
|
||||
* <p>
|
||||
* This field should be null if there is not currently a pending transfer or if the object being
|
||||
* transferred is not a domain.
|
||||
*
|
||||
* <p>This field should be null if there is not currently a pending transfer or if the object
|
||||
* being transferred is not a domain.
|
||||
*/
|
||||
@IgnoreSave(IfNull.class)
|
||||
Ref<BillingEvent.Recurring> serverApproveAutorenewEvent;
|
||||
|
||||
/**
|
||||
* The autorenew poll message that should be associated with this resource after the transfer.
|
||||
* <p>
|
||||
* This field should be null if there is not currently a pending transfer or if the object being
|
||||
* transferred is not a domain.
|
||||
*
|
||||
* <p>This field should be null if there is not currently a pending transfer or if the object
|
||||
* being transferred is not a domain.
|
||||
*/
|
||||
@IgnoreSave(IfNull.class)
|
||||
Ref<PollMessage.Autorenew> serverApproveAutorenewPollMessage;
|
||||
|
|
|
@ -32,9 +32,9 @@ public class EnumToAttributeAdapter<E extends Enum<E> & EnumToAttributeAdapter.E
|
|||
|
||||
/**
|
||||
* EPP's peculiar enum format.
|
||||
* <p>
|
||||
* It's meant to allow more information inside the element, but it's an annoyance when we want to
|
||||
* deal with pure enums.
|
||||
*
|
||||
* <p>It's meant to allow more information inside the element, but it's an annoyance when we want
|
||||
* to deal with pure enums.
|
||||
*/
|
||||
static class EnumShim {
|
||||
@XmlAttribute
|
||||
|
|
|
@ -33,10 +33,10 @@ import java.util.Date;
|
|||
|
||||
/**
|
||||
* Stores Joda {@link ReadableInstant} types ({@code DateTime}, etc) as a {@link java.util.Date}.
|
||||
* <p>
|
||||
* This is a fork of the {@code ReadableInstantTranslatorFactory} that comes bundled with Objectify.
|
||||
* The original reifies a {@link ReadableInstant} using the machine's local time zone. This version
|
||||
* always uses UTC.
|
||||
*
|
||||
* <p>This is a fork of the {@code ReadableInstantTranslatorFactory} that comes bundled with
|
||||
* Objectify. The original reifies a {@link ReadableInstant} using the machine's local time
|
||||
* zone. This version always uses UTC.
|
||||
*/
|
||||
public class ReadableInstantUtcTranslatorFactory
|
||||
extends ValueTranslatorFactory<ReadableInstant, Date> {
|
||||
|
|
|
@ -56,9 +56,10 @@ public final class XsrfTokenManager {
|
|||
|
||||
/**
|
||||
* Generate an xsrf token for a given scope using the logged in user or else no user.
|
||||
* <p>
|
||||
* If there is no user, the entire xsrf check becomes basically a no-op, but that's ok because any
|
||||
* callback that doesn't have a user shouldn't be able to access any per-user resources anyways.
|
||||
*
|
||||
* <p>If there is no user, the entire xsrf check becomes basically a no-op, but that's ok because
|
||||
* any callback that doesn't have a user shouldn't be able to access any per-user resources
|
||||
* anyways.
|
||||
*/
|
||||
public static String generateToken(String scope) {
|
||||
return generateToken(scope, getLoggedInEmailOrEmpty());
|
||||
|
|
|
@ -50,9 +50,9 @@ public final class TmchCertificateAuthority {
|
|||
|
||||
/**
|
||||
* A cached supplier that loads the crl from datastore or chooses a default value.
|
||||
* <p>
|
||||
* We keep the cache here rather than caching TmchCrl in the model, because loading the crl string
|
||||
* into an X509CRL instance is expensive and should itself be cached.
|
||||
*
|
||||
* <p>We keep the cache here rather than caching TmchCrl in the model, because loading the crl
|
||||
* string into an X509CRL instance is expensive and should itself be cached.
|
||||
*/
|
||||
private static final Supplier<X509CRL> CRL_CACHE =
|
||||
memoizeWithShortExpiration(new Supplier<X509CRL>() {
|
||||
|
|
|
@ -22,9 +22,9 @@ public interface Command {
|
|||
|
||||
/**
|
||||
* Marker interface for commands that use the remote api.
|
||||
* <p>
|
||||
* Just implementing this is sufficient to use the remote api; {@link RegistryTool} will install
|
||||
* it as needed.
|
||||
*
|
||||
* <p>Just implementing this is sufficient to use the remote api; {@link RegistryTool} will
|
||||
* install it as needed.
|
||||
*/
|
||||
public interface RemoteApiCommand extends Command {}
|
||||
|
||||
|
|
|
@ -54,15 +54,14 @@ import java.util.List;
|
|||
|
||||
/**
|
||||
* Command for creating new auction credits based on a CSV file from Pool.
|
||||
* <p>
|
||||
* The CSV file from the auction provider uses double-quotes around every field, so in order to
|
||||
*
|
||||
* <p>The CSV file from the auction provider uses double-quotes around every field, so in order to
|
||||
* extract the raw field value we strip off the quotes after splitting each line by commas. We are
|
||||
* using a simple parsing strategy that does not support embedded quotation marks, commas, or
|
||||
* newlines.
|
||||
* <p>
|
||||
* TODO(b/16009815): Switch this file to using a real CSV parser.
|
||||
* <p>
|
||||
* Example file format:
|
||||
*
|
||||
* <p>Example file format:
|
||||
*
|
||||
* <pre>
|
||||
* "Affiliate","DomainName","Email","BidderId","BidderStatus","UpdatedAt",
|
||||
* "SalePrice","Commissions","CurrencyCode"
|
||||
|
@ -71,12 +70,14 @@ import java.util.List;
|
|||
* "reg2","foo.xn--q9jyb4c","email2@example.net","???_64","WIN","4/3/2014 7:13:09 PM",
|
||||
* "1000.0000","40.0000","JPY"
|
||||
* </pre>
|
||||
* We only care about three fields: 1) the "Affiliate" field which corresponds to the registrar
|
||||
* clientId stored in datastore, and which we use to determine which registrar gets the credit,
|
||||
* 2) the "Commissions" field which contains the amount of the auction credit (as determined by
|
||||
* logic on the auction provider's side, see the Finance Requirements Doc for more information), and
|
||||
* 3) the "CurrencyCode" field, which we validate matches the TLD-wide currency for this TLD.
|
||||
*
|
||||
* <p>We only care about three fields: 1) the "Affiliate" field which corresponds to the registrar
|
||||
* clientId stored in datastore, and which we use to determine which registrar gets the credit, 2)
|
||||
* the "Commissions" field which contains the amount of the auction credit (as determined by logic
|
||||
* on the auction provider's side, see the Finance Requirements Doc for more information), and 3)
|
||||
* the "CurrencyCode" field, which we validate matches the TLD-wide currency for this TLD.
|
||||
*/
|
||||
// TODO(b/16009815): Switch this file to using a real CSV parser.
|
||||
@Parameters(separators = " =", commandDescription = "Create new auction credits based on CSV")
|
||||
final class CreateAuctionCreditsCommand extends MutatingCommand {
|
||||
|
||||
|
|
|
@ -146,8 +146,8 @@ final class MakeBillingTablesCommand extends BigqueryCommand {
|
|||
* Generates a view of registrar credit balance entities that collapses them down to the one
|
||||
* 'true' credit balance for a given credit ID and effective time, eliminating any duplicates by
|
||||
* choosing the most recently written balance entry of the set.
|
||||
* <p>
|
||||
* The result is a list of the historical balances of each credit (according to the most recent
|
||||
*
|
||||
* <p>The result is a list of the historical balances of each credit (according to the most recent
|
||||
* data written) that can be used to find the active balance of a credit at any point in time.
|
||||
*/
|
||||
private void makeCreditBalanceView() throws Exception {
|
||||
|
|
|
@ -130,10 +130,10 @@ public abstract class MutatingCommand extends ConfirmingCommand implements Remot
|
|||
|
||||
/**
|
||||
* Initializes the command.
|
||||
* <p>
|
||||
* Subclasses override this method to populate {@link #changedEntitiesMap} with updated
|
||||
* entities. The old entity is the key and the new entity is the value; the key is null for
|
||||
* newly created entities and the value is null for deleted entities.
|
||||
*
|
||||
* <p>Subclasses override this method to populate {@link #changedEntitiesMap} with updated
|
||||
* entities. The old entity is the key and the new entity is the value; the key is null for newly
|
||||
* created entities and the value is null for deleted entities.
|
||||
*/
|
||||
@Override
|
||||
protected abstract void init() throws Exception;
|
||||
|
|
|
@ -85,8 +85,8 @@ final class UpdateApplicationStatusCommand extends MutatingCommand {
|
|||
/**
|
||||
* Stages changes to update the status of an application and also enqueue a poll message for the
|
||||
* status change, which may contain a PendingActionNotificationResponse if this is a final status.
|
||||
* <p>
|
||||
* This method must be called from within a transaction.
|
||||
*
|
||||
* <p>This method must be called from within a transaction.
|
||||
*/
|
||||
private void updateApplicationStatus(String applicationId) {
|
||||
ofy().assertInTransaction();
|
||||
|
|
|
@ -35,8 +35,8 @@ public final class DateTimeParameter extends ParameterConverterValidator<DateTim
|
|||
* Parser for DateTimes that permits only a restricted subset of ISO 8601 datetime syntax.
|
||||
* The supported format is "YYYY-MM-DD'T'HH:MM:SS[.SSS]ZZ", i.e. there must be a complete date
|
||||
* and at least hours, minutes, seconds, and time zone; milliseconds are optional.
|
||||
* <p>
|
||||
* We use this instead of the default {@link ISODateTimeFormat#dateTimeParser()} because that
|
||||
*
|
||||
* <p>We use this instead of the default {@link ISODateTimeFormat#dateTimeParser()} because that
|
||||
* parser is very flexible and accepts date times with missing dates, missing dates, and various
|
||||
* other unspecified fields that can lead to confusion and ambiguity.
|
||||
*/
|
||||
|
|
|
@ -18,8 +18,8 @@ import java.util.logging.Level;
|
|||
|
||||
/**
|
||||
* Java logging level CLI parameter converter/validator.
|
||||
* <p>
|
||||
* If Level were an enum then this wouldn't be needed since JCommander has built-in conversion
|
||||
*
|
||||
* <p>If Level were an enum then this wouldn't be needed since JCommander has built-in conversion
|
||||
* support for enums, but Level is actually just a regular class with some static instances.
|
||||
*/
|
||||
public final class LoggingLevelParameter extends ParameterConverterValidator<Level> {
|
||||
|
|
|
@ -30,15 +30,16 @@ import java.util.Map;
|
|||
|
||||
/**
|
||||
* Combined converter and validator class for transition list JCommander argument strings.
|
||||
* <p>
|
||||
* These strings have the form {@code <DateTime>=<T-str>,[<DateTime>=<T-str>]*} where
|
||||
* {@code <T-str>} is a string that can be parsed into an instance of some value type {@code T},
|
||||
* and the entire argument represents a series of timed transitions of some property taking on
|
||||
* those values. This class converts such a string into an ImmutableSortedMap mapping DateTime to
|
||||
*
|
||||
* <p>These strings have the form {@code <DateTime>=<T-str>,[<DateTime>=<T-str>]*} where
|
||||
* {@code <T-str>} is a string that can be parsed into an instance of some value type {@code T}, and
|
||||
* the entire argument represents a series of timed transitions of some property taking on those
|
||||
* values. This class converts such a string into an ImmutableSortedMap mapping DateTime to
|
||||
* {@code T}. Validation and conversion share the same logic; validation is just done by attempting
|
||||
* conversion and throwing exceptions if need be.
|
||||
* <p>
|
||||
* Subclasses must implement parseValue() to define how to parse {@code <T-str>} into a {@code T}.
|
||||
*
|
||||
* <p>Subclasses must implement parseValue() to define how to parse {@code <T-str>} into a
|
||||
* {@code T}.
|
||||
*
|
||||
* @param <T> instance value type
|
||||
*/
|
||||
|
|
|
@ -76,8 +76,8 @@ public abstract class ListObjectsAction<T extends ImmutableObject> implements Ru
|
|||
|
||||
/**
|
||||
* Returns an {@link ImmutableBiMap} that maps any field name aliases to the actual field names.
|
||||
* <p>
|
||||
* Users can select aliased fields for display using either the original name or the alias. By
|
||||
*
|
||||
* <p>Users can select aliased fields for display using either the original name or the alias. By
|
||||
* default, aliased fields will use the alias name as the header instead of the original name.
|
||||
*/
|
||||
ImmutableBiMap<String, String> getFieldAliases() {
|
||||
|
@ -89,11 +89,11 @@ public abstract class ListObjectsAction<T extends ImmutableObject> implements Ru
|
|||
* will override, for any overlapping field names, the default behavior of getting the field
|
||||
* value by looking up that field name in the map returned by
|
||||
* {@link ImmutableObject#toDiffableFieldMap}.
|
||||
* <p>
|
||||
* This can be used to specify customized printing of certain fields (e.g. to print out a boolean
|
||||
* field as "active" or "-" instead of "true" or "false"). It can also be used to add fields to
|
||||
* the data, e.g. for computed fields that can be accessed from the object directly but aren't
|
||||
* stored as simple fields.
|
||||
*
|
||||
* <p>This can be used to specify customized printing of certain fields (e.g. to print out a
|
||||
* boolean field as "active" or "-" instead of "true" or "false"). It can also be used to add
|
||||
* fields to the data, e.g. for computed fields that can be accessed from the object directly but
|
||||
* aren't stored as simple fields.
|
||||
*/
|
||||
ImmutableMap<String, String> getFieldOverrides(@SuppressWarnings("unused") T object) {
|
||||
return ImmutableMap.of();
|
||||
|
@ -269,8 +269,8 @@ public abstract class ListObjectsAction<T extends ImmutableObject> implements Ru
|
|||
/**
|
||||
* Returns for the given column widths map a row formatting function that converts a row map (of
|
||||
* column keys to cell values) into a single string with each column right-padded to that width.
|
||||
* <p>
|
||||
* The resulting strings separate padded fields with two spaces and each end in a newline.
|
||||
*
|
||||
* <p>The resulting strings separate padded fields with two spaces and each end in a newline.
|
||||
*/
|
||||
private static Function<Map<String, String>, String> makeRowFormatter(
|
||||
final Map<String, Integer> columnWidths) {
|
||||
|
|
|
@ -57,8 +57,8 @@ import javax.servlet.http.HttpServletResponse;
|
|||
|
||||
/**
|
||||
* A servlet that returns availability and premium checks as json.
|
||||
* <p>
|
||||
* This servlet returns plain JSON without a safety prefix, so it's vital that the output not be
|
||||
*
|
||||
* <p>This servlet returns plain JSON without a safety prefix, so it's vital that the output not be
|
||||
* user controlled, lest it open an XSS vector. Do not modify this to return the domain name in the
|
||||
* response.
|
||||
*/
|
||||
|
|
|
@ -26,22 +26,22 @@ import java.util.concurrent.TimeUnit;
|
|||
/**
|
||||
* A factory for {@link TimeLimiter} instances that use request threads, which carry the namespace
|
||||
* and live only as long as the request that spawned them.
|
||||
* <p>
|
||||
* It is safe to reuse instances of this class, but there is no benefit in doing so over creating a
|
||||
* fresh instance each time.
|
||||
*
|
||||
* <p>It is safe to reuse instances of this class, but there is no benefit in doing so over creating
|
||||
* a fresh instance each time.
|
||||
*/
|
||||
public class AppEngineTimeLimiter {
|
||||
|
||||
/**
|
||||
* An {@code ExecutorService} that uses a new thread for every task.
|
||||
* <p>
|
||||
* We need to use fresh threads for each request so that we can use App Engine's request threads.
|
||||
* If we cached these threads in a thread pool (and if we were executing on a backend, where there
|
||||
* is no time limit on requests) the caching would cause the thread to keep the task that opened
|
||||
* it alive even after returning an http response, and would also cause the namespace that the
|
||||
* original thread was created in to leak out to later reuses of the thread.
|
||||
* <p>
|
||||
* Since there are no cached resources, this class doesn't have to support being shutdown.
|
||||
*
|
||||
* <p>We need to use fresh threads for each request so that we can use App Engine's request
|
||||
* threads. If we cached these threads in a thread pool (and if we were executing on a backend,
|
||||
* where there is no time limit on requests) the caching would cause the thread to keep the task
|
||||
* that opened it alive even after returning an http response, and would also cause the namespace
|
||||
* that the original thread was created in to leak out to later reuses of the thread.
|
||||
*
|
||||
* <p>Since there are no cached resources, this class doesn't have to support being shutdown.
|
||||
*/
|
||||
private static class NewRequestThreadExecutorService extends AbstractExecutorService {
|
||||
|
||||
|
|
|
@ -113,9 +113,9 @@ public class CollectionUtils {
|
|||
|
||||
/**
|
||||
* Turns an empty collection into a null collection.
|
||||
* <p>
|
||||
* This is unwise in the general case (nulls are bad; empties are good) but occasionally needed to
|
||||
* cause JAXB not to emit a field, or to avoid saving something to datastore. The method name
|
||||
*
|
||||
* <p>This is unwise in the general case (nulls are bad; empties are good) but occasionally needed
|
||||
* to cause JAXB not to emit a field, or to avoid saving something to datastore. The method name
|
||||
* includes "force" to indicate that you should think twice before using it.
|
||||
*/
|
||||
@Nullable
|
||||
|
|
|
@ -31,10 +31,10 @@ public class DateTimeUtils {
|
|||
|
||||
/**
|
||||
* A date in the far future that we can treat as infinity.
|
||||
* <p>
|
||||
* This value is (2^63-1)/1000 rounded down. AppEngine stores dates as 64 bit microseconds, but
|
||||
* Java uses milliseconds, so this is the largest representable date that will survive
|
||||
* a round-trip through the datastore.
|
||||
*
|
||||
* <p>This value is (2^63-1)/1000 rounded down. AppEngine stores dates as 64 bit microseconds, but
|
||||
* Java uses milliseconds, so this is the largest representable date that will survive a
|
||||
* round-trip through the datastore.
|
||||
*/
|
||||
public static final DateTime END_OF_TIME = new DateTime(Long.MAX_VALUE / 1000, DateTimeZone.UTC);
|
||||
|
||||
|
|
|
@ -53,9 +53,9 @@ public final class X509Utils {
|
|||
/**
|
||||
* Parse the encoded certificate and return a base64 encoded string (without padding) of the
|
||||
* SHA-256 digest of the certificate.
|
||||
* <p>
|
||||
* Note that this must match the method used by the GFE to generate the client certificate hash so
|
||||
* that the two will match when we check against the whitelist.
|
||||
*
|
||||
* <p>Note that this must match the method used by the GFE to generate the client certificate hash
|
||||
* so that the two will match when we check against the whitelist.
|
||||
*/
|
||||
public static String getCertificateHash(X509Certificate cert) {
|
||||
try {
|
||||
|
|
|
@ -121,9 +121,9 @@ public class XmlTransformer {
|
|||
|
||||
/**
|
||||
* Validates XML text against {@link #schema} without marshalling.
|
||||
* <p>
|
||||
* You must specify the XML class you expect to receive as the root element.
|
||||
* Validation is performed in accordance with the hard-coded XML schemas.
|
||||
*
|
||||
* <p>You must specify the XML class you expect to receive as the root element. Validation is
|
||||
* performed in accordance with the hard-coded XML schemas.
|
||||
*
|
||||
* @throws XmlException if XML input was invalid or root element doesn't match {@code expect}.
|
||||
*/
|
||||
|
@ -137,8 +137,8 @@ public class XmlTransformer {
|
|||
|
||||
/**
|
||||
* Turns XML text into an object, validating against {@link #schema}.
|
||||
* <p>
|
||||
* You must specify the XML class you expect to receive as the root element. Validation is
|
||||
*
|
||||
* <p>You must specify the XML class you expect to receive as the root element. Validation is
|
||||
* performed in accordance with the hard-coded XML schemas.
|
||||
*
|
||||
* @throws XmlException if failed to read from {@code bytes}, XML input is invalid, or root
|
||||
|
@ -181,11 +181,11 @@ public class XmlTransformer {
|
|||
|
||||
/**
|
||||
* Streams {@code root} without XML declaration, optionally validating against the schema.
|
||||
* <p>
|
||||
* The root object must be annotated with {@link javax.xml.bind.annotation.XmlRootElement}. If the
|
||||
* validation parameter is set to {@link ValidationMode#STRICT} this method will verify that your
|
||||
* object strictly conforms to {@link #schema}. Because the output is streamed,
|
||||
* {@link XmlException} will most likely be thrown <i>after</i> output has been written.
|
||||
*
|
||||
* <p>The root object must be annotated with {@link javax.xml.bind.annotation.XmlRootElement}. If
|
||||
* the validation parameter is set to {@link ValidationMode#STRICT} this method will verify that
|
||||
* your object strictly conforms to {@link #schema}. Because the output is streamed, {@link
|
||||
* XmlException} will most likely be thrown <i>after</i> output has been written.
|
||||
*
|
||||
* @param root the object to write
|
||||
* @param writer to write the output to
|
||||
|
@ -206,10 +206,10 @@ public class XmlTransformer {
|
|||
|
||||
/**
|
||||
* Validates and streams {@code root} as formatted XML bytes with XML declaration.
|
||||
* <p>
|
||||
* The root object must be annotated with {@link javax.xml.bind.annotation.XmlRootElement}. If the
|
||||
* validation parameter is set to {@link ValidationMode#STRICT} this method will verify that your
|
||||
* object strictly conforms to {@link #schema}. Because the output is streamed,
|
||||
*
|
||||
* <p>The root object must be annotated with {@link javax.xml.bind.annotation.XmlRootElement}. If
|
||||
* the validation parameter is set to {@link ValidationMode#STRICT} this method will verify that
|
||||
* your object strictly conforms to {@link #schema}. Because the output is streamed,
|
||||
* {@link XmlException} will most likely be thrown <i>after</i> output has been written.
|
||||
*
|
||||
* @param root the object to write
|
||||
|
@ -233,11 +233,11 @@ public class XmlTransformer {
|
|||
|
||||
/**
|
||||
* Validates and streams {@code root} as characters, always using strict validation.
|
||||
* <p>
|
||||
* The root object must be annotated with {@link javax.xml.bind.annotation.XmlRootElement}. This
|
||||
* method will verify that your object strictly conforms to {@link #schema}. Because the output is
|
||||
* streamed, {@link XmlException} will most likely be thrown <i>after</i> output has been
|
||||
* written.
|
||||
*
|
||||
* <p>The root object must be annotated with {@link javax.xml.bind.annotation.XmlRootElement}.
|
||||
* This method will verify that your object strictly conforms to {@link #schema}. Because the
|
||||
* output is streamed, {@link XmlException} will most likely be thrown <i>after</i> output has
|
||||
* been written.
|
||||
*
|
||||
* @param root the object to write
|
||||
* @param result to write the output to
|
||||
|
|
Loading…
Add table
Reference in a new issue