001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.gui.io;
003    
004    import java.io.File;
005    
006    import org.openstreetmap.josm.gui.layer.OsmDataLayer;
007    import org.openstreetmap.josm.tools.CheckParameterUtil;
008    
009    /**
010     * SaveLayerInfo represents the information, user preferences and save/upload states of
011     * a layer which might be uploaded/saved.
012     *
013     */
014    class SaveLayerInfo implements Comparable<SaveLayerInfo> {
015    
016        /** the osm data layer */
017        private OsmDataLayer layer;
018        private boolean doSaveToFile;
019        private boolean doUploadToServer;
020        private File file;
021        private UploadOrSaveState uploadState;
022        private UploadOrSaveState saveState;
023    
024        /**
025         *
026         * @param layer the layer. Must not be null.
027         * @throws IllegalArgumentException thrown if layer is null
028         */
029        public SaveLayerInfo(OsmDataLayer layer) {
030            CheckParameterUtil.ensureParameterNotNull(layer, "layer");
031            this.layer = layer;
032            this.doSaveToFile = layer.requiresSaveToFile();
033            this.doUploadToServer = layer.requiresUploadToServer() && !layer.isUploadDiscouraged();
034            this.file = layer.getAssociatedFile();
035        }
036    
037        /**
038         * Replies the layer this info objects holds information for
039         *
040         * @return the layer this info objects holds information for
041         */
042        public OsmDataLayer getLayer() {
043            return layer;
044        }
045    
046        /**
047         * Replies true if this layer should be saved to a file; false, otherwise
048         *
049         * @return true if this layers should be saved to a file; false, otherwise
050         */
051        public boolean isDoSaveToFile() {
052            return doSaveToFile;
053        }
054    
055        /**
056         * Sets whether this layer should be saved to a file
057         *
058         * @param doSaveToFile true to save; false, to skip saving
059         */
060        public void setDoSaveToFile(boolean doSaveToFile) {
061            this.doSaveToFile = doSaveToFile;
062        }
063    
064        /**
065         * Replies true if this layer should be uploaded to the server; false, otherwise
066         *
067         * @return true if this layer should be uploaded to the server; false, otherwise
068         */
069        public boolean isDoUploadToServer() {
070            return doUploadToServer;
071        }
072    
073        /**
074         * Sets whether this layer should be uploaded to a file
075         *
076         * @param doSaveToFile true to upload; false, to skip uploading
077         */
078    
079        public void setDoUploadToServer(boolean doUploadToServer) {
080            this.doUploadToServer = doUploadToServer;
081        }
082    
083        /**
084         * Replies true if this layer should be uploaded to the server and saved to file.
085         *
086         * @return true if this layer should be uploaded to the server and saved to file
087         */
088        public boolean isDoSaveAndUpload() {
089            return isDoSaveToFile() && isDoUploadToServer();
090        }
091    
092        /**
093         * Replies the name of the layer
094         *
095         * @return the name of the layer
096         */
097        public String getName() {
098            return layer.getName() == null ? "" : layer.getName();
099        }
100    
101        /**
102         * Replies the file this layer should be saved to, if {@link #isDoSaveToFile()} is true
103         *
104         * @return the file this layer should be saved to, if {@link #isDoSaveToFile()} is true
105         */
106        public File getFile() {
107            return file;
108        }
109    
110        /**
111         * Sets the file this layer should be saved to, if {@link #isDoSaveToFile()} is true
112         *
113         * @param file the file
114         */
115        public void setFile(File file) {
116            this.file = file;
117        }
118    
119        public int compareTo(SaveLayerInfo o) {
120            if (isDoSaveAndUpload()) {
121                if (o.isDoSaveAndUpload())
122                    return getName().compareTo(o.getName());
123                return -1;
124            } else if (o.isDoSaveAndUpload())
125                return 1;
126            if (isDoUploadToServer()) {
127                if (o.isDoUploadToServer())
128                    return getName().compareTo(o.getName());
129                return -1;
130            } else if (o.isDoUploadToServer())
131                return 1;
132            if (isDoSaveToFile()) {
133                if (o.isDoSaveToFile())
134                    return getName().compareTo(o.getName());
135                return -1;
136            } else if (o.isDoSaveToFile())
137                return 1;
138            return getName().compareTo(o.getName());
139        }
140    
141        /**
142         * Replies the upload state of {@link #getLayer()}.
143         * <ul>
144         *   <li>{@link UploadOrSaveState#OK} if {@link #getLayer() was successfully uploaded</li>
145         *   <li>{@link UploadOrSaveState#canceled} if uploading {@link #getLayer() was canceled</li>
146         *   <li>{@link UploadOrSaveState#FAILED} if uploading {@link #getLayer() has failed</li>
147         * </ul>
148         *
149         * @return the upload state
150         */
151        public UploadOrSaveState getUploadState() {
152            return uploadState;
153        }
154    
155        /**
156         * Sets the upload state for {@link #getLayer()}
157         *
158         * @param uploadState the upload state
159         */
160        public void setUploadState(UploadOrSaveState uploadState) {
161            this.uploadState = uploadState;
162        }
163    
164        /**
165         * Replies the save state of {@link #getLayer()}.
166         * <ul>
167         *   <li>{@link UploadOrSaveState#OK} if {@link #getLayer() was successfully saved to file</li>
168         *   <li>{@link UploadOrSaveState#canceled} if saving {@link #getLayer() was canceled</li>
169         *   <li>{@link UploadOrSaveState#FAILED} if saving {@link #getLayer() has failed</li>
170         * </ul>
171         *
172         * @return the save state
173         */
174        public UploadOrSaveState getSaveState() {
175            return saveState;
176        }
177    
178        /**
179         * Sets the save state for {@link #getLayer()}
180         *
181         * @param saveState save the upload state
182         */
183        public void setSaveState(UploadOrSaveState saveState) {
184            this.saveState = saveState;
185        }
186    
187        /**
188         * Resets the upload and save state
189         *
190         * @see #setUploadState(UploadOrSaveState)
191         * @see #setSaveState(UploadOrSaveState)
192         * @see #getUploadState()
193         * @see #getSaveState()
194         */
195        public void resetUploadAndSaveState() {
196            this.uploadState = null;
197            this.saveState = null;
198        }
199    }