001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.layer; 003 004import java.io.File; 005import java.io.IOException; 006 007import org.openstreetmap.josm.data.Data; 008import org.openstreetmap.josm.data.osm.Lockable; 009import org.openstreetmap.josm.gui.io.AbstractIOTask; 010import org.openstreetmap.josm.gui.io.AbstractUploadDialog; 011import org.openstreetmap.josm.gui.progress.ProgressMonitor; 012 013/** 014 * A modifiable layer. 015 * @since 7358 016 */ 017public abstract class AbstractModifiableLayer extends Layer implements DownloadFromServer, UploadToServer, SaveToFile, Lockable { 018 019 /** 020 * Property used to know if this layer has to be saved on disk. 021 * @since 18287 022 */ 023 public static final String REQUIRES_SAVE_TO_DISK_PROP = AbstractModifiableLayer.class.getName() + ".requiresSaveToDisk"; 024 static final String IS_DIRTY_SYMBOL = "*"; 025 026 /** 027 * Constructs a new {@code ModifiableLayer}. 028 * @param name Layer name 029 */ 030 protected AbstractModifiableLayer(String name) { 031 super(name); 032 } 033 034 @Override 035 public boolean isDownloadable() { 036 // Override if needed 037 return false; 038 } 039 040 @Override 041 public boolean isUploadable() { 042 // Override if needed 043 return false; 044 } 045 046 @Override 047 public boolean requiresUploadToServer() { 048 // Override if needed 049 return false; 050 } 051 052 @Override 053 public boolean requiresSaveToFile() { 054 // Override if needed 055 return false; 056 } 057 058 @Override 059 public boolean isUploadDiscouraged() { 060 // Override if needed 061 return false; 062 } 063 064 /** 065 * Determines if this layer is "dirty", i.e. requires save or upload 066 * @return if this layer is "dirty" 067 * @since 18287 068 */ 069 public boolean isDirty() { 070 // Override if needed 071 return requiresSaveToFile() || (requiresUploadToServer() && !isUploadDiscouraged()); 072 } 073 074 /** 075 * Determines if data managed by this layer has been modified. 076 * @return true if data has been modified; false, otherwise 077 */ 078 public abstract boolean isModified(); 079 080 @Override 081 public void onPostSaveToFile() { 082 // Override if needed 083 } 084 085 /** 086 * Initializes the layer after a successful upload to the server. 087 */ 088 @Override 089 public void onPostUploadToServer() { 090 // Override if needed 091 } 092 093 @Override 094 public AbstractIOTask createUploadTask(ProgressMonitor monitor) { 095 // Override if needed 096 return null; 097 } 098 099 @Override 100 public AbstractUploadDialog getUploadDialog() { 101 // Override if needed 102 return null; 103 } 104 105 @Override 106 public boolean isUploadInProgress() { 107 // Override if needed 108 return false; 109 } 110 111 @Override 112 public void lock() { 113 // Override if needed 114 } 115 116 @Override 117 public void unlock() { 118 // Override if needed 119 } 120 121 @Override 122 public boolean isLocked() { 123 // Override if needed 124 return false; 125 } 126 127 /** 128 * Perform the autosave action for the layer 129 * 130 * @param file The file to save to 131 * @return {@code true} if the layer was successfully saved 132 * @throws IOException If there was an IO exception from saving 133 * @since 16548 134 */ 135 public boolean autosave(File file) throws IOException { 136 // Override if needed; 137 return false; 138 } 139 140 /** 141 * Get the data for the modifiable layer 142 * 143 * @return The data object 144 * @since 16548 145 */ 146 public Data getData() { 147 // Override if needed; 148 return null; 149 } 150}