001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2004-2006, GeoTools Project Managment Committee (PMC)
005: * (C) 2004, Institut de Recherche pour le Développement
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation;
010: * version 2.1 of the License.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * This package contains documentation from OpenGIS specifications.
018: * OpenGIS consortium's work is fully acknowledged here.
019: */
020: package org.geotools.metadata.iso.identification;
021:
022: // J2SE direct dependencies
023: import java.util.Collection;
024: import java.util.Date;
025:
026: // OpenGIS dependencies
027: import org.opengis.metadata.citation.ResponsibleParty;
028: import org.opengis.metadata.identification.Usage;
029: import org.opengis.util.InternationalString;
030:
031: // Geotools dependencies
032: import org.geotools.metadata.iso.MetadataEntity;
033:
034: /**
035: * Brief description of ways in which the resource(s) is/are currently used.
036: *
037: * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/modules/library/metadata/src/main/java/org/geotools/metadata/iso/identification/UsageImpl.java $
038: * @version $Id: UsageImpl.java 25189 2007-04-17 13:23:47Z desruisseaux $
039: * @author Martin Desruisseaux
040: * @author Touraïvane
041: *
042: * @since 2.1
043: */
044: public class UsageImpl extends MetadataEntity implements Usage {
045: /**
046: * Serial number for compatibility with different versions.
047: */
048: private static final long serialVersionUID = 4059324536168287490L;
049:
050: /**
051: * Brief description of the resource and/or resource series usage.
052: */
053: private InternationalString specificUsage;
054:
055: /**
056: * Date and time of the first use or range of uses of the resource and/or resource series.
057: * Values are milliseconds ellapsed since January 1st, 1970,
058: * or {@link Long#MIN_VALUE} if this value is not set.
059: */
060: private long usageDate = Long.MIN_VALUE;
061:
062: /**
063: * Applications, determined by the user for which the resource and/or resource series
064: * is not suitable.
065: */
066: private InternationalString userDeterminedLimitations;
067:
068: /**
069: * Identification of and means of communicating with person(s) and organization(s)
070: * using the resource(s).
071: */
072: private Collection userContactInfo;
073:
074: /**
075: * Constructs an initially empty usage.
076: */
077: public UsageImpl() {
078: }
079:
080: /**
081: * Constructs a metadata entity initialized with the values from the specified metadata.
082: *
083: * @since 2.4
084: */
085: public UsageImpl(final Usage source) {
086: super (source);
087: }
088:
089: /**
090: * Creates an usage initialized to the specified values.
091: */
092: public UsageImpl(final InternationalString specificUsage,
093: final Collection userContactInfo) {
094: setUserContactInfo(userContactInfo);
095: setSpecificUsage(specificUsage);
096: }
097:
098: /**
099: * Brief description of the resource and/or resource series usage.
100: */
101: public InternationalString getSpecificUsage() {
102: return specificUsage;
103: }
104:
105: /**
106: * Set a brief description of the resource and/or resource series usage.
107: */
108: public synchronized void setSpecificUsage(
109: final InternationalString newValue) {
110: checkWritePermission();
111: specificUsage = newValue;
112: }
113:
114: /**
115: * Date and time of the first use or range of uses of the resource and/or resource series.
116: */
117: public synchronized Date getUsageDate() {
118: return (usageDate != Long.MIN_VALUE) ? new Date(usageDate)
119: : null;
120: }
121:
122: /**
123: * Set the date and time of the first use.
124: */
125: public synchronized void setUsageDate(final Date newValue) {
126: checkWritePermission();
127: usageDate = (newValue != null) ? newValue.getTime()
128: : Long.MIN_VALUE;
129: }
130:
131: /**
132: * Applications, determined by the user for which the resource and/or resource series
133: * is not suitable.
134: */
135: public InternationalString getUserDeterminedLimitations() {
136: return userDeterminedLimitations;
137: }
138:
139: /**
140: * Set applications, determined by the user for which the resource and/or resource series
141: * is not suitable.
142: */
143: public synchronized void setUserDeterminedLimitations(
144: final InternationalString newValue) {
145: checkWritePermission();
146: this .userDeterminedLimitations = newValue;
147: }
148:
149: /**
150: * Identification of and means of communicating with person(s) and organization(s)
151: * using the resource(s).
152: */
153: public synchronized Collection getUserContactInfo() {
154: return userContactInfo = nonNullCollection(userContactInfo,
155: ResponsibleParty.class);
156: }
157:
158: /**
159: * Set identification of and means of communicating with person(s) and organization(s)
160: * using the resource(s).
161: */
162: public synchronized void setUserContactInfo(
163: final Collection newValues) {
164: userContactInfo = copyCollection(newValues, userContactInfo,
165: ResponsibleParty.class);
166: }
167: }
|