001 /*
002 * $Id: AddeEntry.java,v 1.16 2012/04/12 15:36:31 jbeavers Exp $
003 *
004 * This file is part of McIDAS-V
005 *
006 * Copyright 2007-2012
007 * Space Science and Engineering Center (SSEC)
008 * University of Wisconsin - Madison
009 * 1225 W. Dayton Street, Madison, WI 53706, USA
010 * https://www.ssec.wisc.edu/mcidas
011 *
012 * All Rights Reserved
013 *
014 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
015 * some McIDAS-V source code is based on IDV and VisAD source code.
016 *
017 * McIDAS-V is free software; you can redistribute it and/or modify
018 * it under the terms of the GNU Lesser Public License as published by
019 * the Free Software Foundation; either version 3 of the License, or
020 * (at your option) any later version.
021 *
022 * McIDAS-V is distributed in the hope that it will be useful,
023 * but WITHOUT ANY WARRANTY; without even the implied warranty of
024 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
025 * GNU Lesser Public License for more details.
026 *
027 * You should have received a copy of the GNU Lesser Public License
028 * along with this program. If not, see http://www.gnu.org/licenses.
029 */
030
031 package edu.wisc.ssec.mcidasv.servermanager;
032
033
034 /**
035 * Represents a source of ADDE data. An ADDE entry may describe a dataset on
036 * remote servers or the user's own machine.
037 */
038 public interface AddeEntry {
039
040 /** Represents the possible actions that an ADDE editor can perform. */
041 // @PersistableEnum
042 public enum EditorAction {
043 /** Created a new entry; hasn't been verified. */
044 ADDED,
045
046 /** Canceled out of creating or editing an entry. */
047 CANCELLED,
048
049 /** Verified the contents of the editor GUI. */
050 VERIFIED,
051
052 /** Created a new, verified entry. */
053 ADDED_VERIFIED,
054
055 /** Updated an existing entry without verifying changes. */
056 EDITED,
057
058 /** Updated an entry and verified the changes. */
059 EDITED_VERIFIED,
060
061 /** Editor GUI performed some {@literal "invalid"} action. */
062 INVALID;
063 };
064
065 /** Type of chooser this should appear under. */
066
067 public enum EntryType {
068 /** {@link edu.wisc.ssec.mcidasv.chooser.adde.AddeImageChooser} */
069 IMAGE,
070
071 /** {@link edu.wisc.ssec.mcidasv.chooser.adde.AddePointDataChooser} */
072 POINT,
073
074 /** */
075 GRID,
076
077 /** {@link edu.wisc.ssec.mcidasv.chooser.adde.AddeFrontChooser} */
078 TEXT,
079
080 /** */
081 NAV,
082
083 /** {@link edu.wisc.ssec.mcidasv.chooser.adde.AddeRadarChooser} */
084 RADAR,
085
086 /** */
087 UNKNOWN,
088
089 /** */
090 INVALID;
091
092 /**
093 * Attempts to convert a given {@code String} value into a valid
094 * {@code EntryType}.
095 *
096 * @param str {@code String} to convert. Should not be {@code null}.
097 *
098 * @return {@code EntryType} of the value specified in {@code str}.
099 */
100 public static EntryType fromStr(final String str) {
101 return EntryType.valueOf(str);
102 }
103
104 /**
105 * Attempts to convert a given {@code EntryType} into its
106 * {@code String} representation.
107 *
108 * @param type {@code EntryType} constant; should not be {@code null}.
109 *
110 * @return {@code String} representation of {@code type}.
111 */
112 public static String toStr(final EntryType type) {
113 return type.name();
114 }
115 };
116
117 /** Sort of a {@literal "misc"} status field... */
118 public enum EntryValidity {
119 /** Entry has been verified by connecting to the server. */
120 VERIFIED,
121
122 /** Unknown whether or not this entry actually works. */
123 UNVERIFIED,
124
125 /** Entry is being checked for validity. */
126 VALIDATING,
127
128 /**
129 * User has elected to remove this entry. This is an unfortunate
130 * {@literal "special case"}, as we can't simply remove these entries
131 * from a list! Say the user import entries from a remote MCTABLE file
132 * and later deleted some of the imported entries. Fine, good! But
133 * what should happen if the user hears that new servers have been
134 * added to that same MCTABLE file? The entries that the user has
135 * deleted <i>locally</i> should not reappear, right?
136 */
137 DELETED,
138
139 /** Entry is invalid in some way. */
140 INVALID;
141
142 public static EntryValidity fromStr(final String str) {
143 return EntryValidity.valueOf(str);
144 }
145 public static String toStr(final EntryValidity validity) {
146 return validity.name();
147 }
148 };
149
150 /** Where did this entry come from? */
151 public enum EntrySource {
152 /** Entry originated from McIDAS-V. */
153 SYSTEM,
154
155 /** Entry was imported from a MCTABLE file. */
156 MCTABLE,
157
158 /** Entry was added by the user.*/
159 USER,
160
161 /**
162 * Represents an {@literal "invalid"} {@code EntrySource}. Useful for
163 * invalid entry objects ({@link RemoteAddeEntry#INVALID_ENTRY} and
164 * {@link LocalAddeEntry#INVALID_ENTRY}).
165 */
166 INVALID;
167
168 public static EntrySource fromStr(final String str) {
169 return EntrySource.valueOf(str);
170 }
171 public static String toStr(final EntrySource source) {
172 return source.name();
173 }
174 };
175
176 /**
177 * Has the user elected to disable this entry from appearing in its
178 * relevant chooser?
179 */
180 public enum EntryStatus {
181 /** Entry is valid and toggled on. */
182 ENABLED,
183
184 /** Entry is valid and toggled off. */
185 DISABLED,
186
187 /** Something is wrong with this entry. */
188 INVALID;
189
190 public static EntryStatus fromStr(final String str) {
191 return EntryStatus.valueOf(str);
192 }
193
194 public static String toStr(final EntryType type) {
195 return type.name();
196 }
197 };
198
199 /** Represents the {@literal "no accounting"} entries. */
200 public static final AddeAccount DEFAULT_ACCOUNT =
201 new AddeAccount("idv", "0");
202
203 /**
204 * Address of the server associated with the current entry.
205 * {@link LocalAddeEntry}s will return {@code localhost}.
206 */
207 public String getAddress();
208
209 /**
210 * Dataset/group located on the server.
211 */
212 public String getGroup();
213
214 // TODO(jon): what part of a resolv.srv does this represent?
215 /**
216 * Name associated with this entry.
217 *
218 * @return Name associated with this entry.
219 */
220 public String getName();
221
222 /**
223 * Accounting information associated with the current entry. If the server
224 * does not require accounting information, this method returns
225 * {@link #DEFAULT_ACCOUNT}.
226 *
227 * @return ADDE account object.
228 */
229 public AddeAccount getAccount();
230
231 /**
232 * Type of chooser this entry should appear under.
233 *
234 * @return The {@literal "type"} of data associated with this entry.
235 */
236 public EntryType getEntryType();
237
238 /**
239 * Does this entry represent a {@literal "valid"} ADDE server.
240 *
241 * @return Whether or not this entry has been validated.
242 */
243 public EntryValidity getEntryValidity();
244
245 /**
246 * Source that specified this entry. For example; allows you to
247 * distinguish {@literal "system"} entries (which cannot be removed, only
248 * disabled) from entries created by the user (full control).
249 */
250 public EntrySource getEntrySource();
251
252 /**
253 * GUI status of the entry. Differs from {@link EntryValidity} in that
254 * {@code EntryStatus} controls this entry showing up in a chooser and has
255 * nothing to do with whether or not the entry is a valid ADDE server.
256 */
257 public EntryStatus getEntryStatus();
258
259 /**
260 * Handy {@code String} representation of this ADDE entry. Currently looks
261 * like {@code ADDRESS/GROUP}, but this is subject to change.
262 */
263 public String getEntryText();
264
265 // TODO(jon): should this be removed? this makes the entries mutable!
266 public void setEntryStatus(final EntryStatus newStatus);
267
268 // TODO(jon): integrate with parameter sets one fine day?
269 public String getEntryAlias();
270
271 // TODO(jon): should this be removed? this makes the entries mutable!
272 public void setEntryAlias(final String newAlias);
273
274 /**
275 * Currently used as a identifier for convenient storage by the server
276 * manager.
277 */
278 public String asStringId();
279
280 /**
281 * String representation of this entry.
282 */
283 public String toString();
284 }