Revision 2142

View differences:

org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/resourcesstorage/EmptyResourcesStorage.java
4 4
import java.io.InputStream;
5 5
import java.io.OutputStream;
6 6
import java.net.URL;
7
import java.util.Collections;
7 8
import java.util.List;
8 9

  
9 10
/**
......
89 90
    public List<Resource> getLocalizedResources(String resourceName) {
90 91
        return null;
91 92
    }
93

  
94
    @Override
95
    public List<String> getResourceNames() {
96
      return Collections.EMPTY_LIST;
97
    }
98

  
92 99
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/resourcesstorage/ResourcesStorage.java
89 89
    public boolean isReadOnly();
90 90
    
91 91
    public boolean exists(String resourceName);
92

  
93
    /**
94
     * Return the resource names in this store.
95
     * If the storage don't have resources, return a empty list.
96
     * 
97
     * @return list of resource names or empty list.
98
     */
99
    public List<String> getResourceNames();
100

  
92 101
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/resourcesstorage/FilesResourcesStorage.java
11 11
import java.util.ArrayList;
12 12
import java.util.List;
13 13
import org.apache.commons.io.IOUtils;
14
import org.apache.commons.lang3.StringUtils;
14 15
import org.gvsig.tools.util.HasAFile;
15 16

  
16 17
/**
......
159 160
    public List<String> getPaths() {
160 161
        return this.resourcesPaths;
161 162
    }
163

  
164
    @Override
165
    public List<String> getResourceNames() {
166
        List<String> names = new ArrayList<>();
167
        
168
        for (String pathName : resourcesPaths) {
169
            File folder = new File(pathName);
170
            if( folder.isDirectory() ) {
171
              for (File f: folder.listFiles()) {
172
                if( f.isFile() ) {
173
                  names.add(f.getName());
174
                }
175
              }
176
            } else {
177
              File parent = folder.getParentFile();
178
              String prefix = pathName + this.getSeparator();
179
              int prefix_len = prefix.length();
180
              for (File f: parent.listFiles()) {
181
                if( f.isFile() ) {
182
                  String fname = f.getName();
183
                  if( StringUtils.startsWithIgnoreCase(fname, prefix) ) {
184
                    names.add(fname.substring(prefix_len));
185
                  }
186
                }
187
              }
188
            }
189
        }
190
        return names;
191
    }
192

  
162 193
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/resourcesstorage/AbstractResourcesStorage.java
1 1
package org.gvsig.tools.resourcesstorage;
2 2

  
3 3
import java.util.ArrayList;
4
import java.util.Collections;
4 5
import java.util.List;
5 6
import java.util.Locale;
6 7
import org.gvsig.tools.ToolsLocator;
......
133 134
        return ress;
134 135
    }
135 136

  
137
  @Override
138
  public List<String> getResourceNames() {
139
    return Collections.EMPTY_LIST;
140
  }
141

  
136 142
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/resourcesstorage/BaseMultiResourcesStorage.java
92 92
        }
93 93
        return false;
94 94
    }
95

  
96
    @Override
97
    public List<String> getResourceNames() {
98
        List<String> names = new ArrayList<>();
99
        
100
        for (ResourcesStorage storage : storages) {
101
            names.addAll(storage.getResourceNames());
102
        }
103
        return names;
104
    }
95 105
    
96 106
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/ToolsLocator.java
22 22
 */
23 23
package org.gvsig.tools;
24 24

  
25
import org.gvsig.tools.bookmarksandhistory.BookmarksAndHistoryManager;
26
import org.gvsig.tools.bookmarksandhistory.impl.DefaultBookmarksAndHistoryManager;
25 27
import org.gvsig.tools.complement.ComplementsManager;
26 28
import org.gvsig.tools.complement.impl.DefaultComplementsManager;
27 29
import org.gvsig.tools.dataTypes.DataTypesManager;
......
105 107
    public static final String COMPLEMENTS_MANAGER_NAME = "org.gvsig.tools.complements.manager";
106 108
    private static final String COMPLEMENTS_MANAGER_DESCRIPTION = "Default complements Manager";
107 109

  
110
    public static final String BOOKMARKSANDHISTORY_MANAGER_NAME = "org.gvsig.tools.bookmarksAndHistory.manager";
111
    private static final String BOOKMARKSANDHISTORY_MANAGER_DESCRIPTION = "Default BookmarksAndHistory Manager";
112
    
108 113
    /**
109 114
     * Unique instance.
110 115
     */
111
    private static final ToolsLocator instance = new ToolsLocator();
116
    private static final ToolsLocator INSTANCE = new ToolsLocator();
112 117

  
113 118
    // Comma list of xml pull parser factories, parsers or serializers
114 119
    private String xmlPullParserFactoryClassNames = ""
......
116 121
            "org.kxml2.io.KXmlParser," + // KXML2 parser
117 122
            "org.kxml2.io.KXmlSerializer"; // KXML2 serializer
118 123

  
124
    @SuppressWarnings("OverridableMethodCallInConstructor")
119 125
    private ToolsLocator() {
120 126
        // Register default ServiceLoader
121
        registerDefault(SERVICE_LOADER_NAME, SERVICE_LOADER_DESCRIPTION,
122
                DefaultServiceLoader.class);
127
        registerDefault(
128
                SERVICE_LOADER_NAME, 
129
                SERVICE_LOADER_DESCRIPTION,
130
                DefaultServiceLoader.class
131
        );
123 132
    }
124 133

  
125 134
    /**
......
128 137
     * @return the singleton instance
129 138
     */
130 139
    public static ToolsLocator getInstance() {
131
        return instance;
140
        return INSTANCE;
132 141
    }
133 142

  
134 143
    @Override
......
551 560
                FOLDERS_MANAGER_DESCRIPTION, clazz);
552 561
    }
553 562

  
554
    public static void registerComplementsManager(Class clazz) {
555
        getInstance().registerDefault(COMPLEMENTS_MANAGER_NAME,
556
                COMPLEMENTS_MANAGER_DESCRIPTION, clazz);
557
    }
558

  
559
    public static ComplementsManager getComplementsManager()
560
            throws LocatorException {
561
        return (ComplementsManager) getInstance().get(COMPLEMENTS_MANAGER_NAME);
562
    }
563

  
564 563
    /**
565 564
     * Return a reference to {@link FoldersManager}.
566 565
     *
......
574 573
        return (FoldersManager) getInstance().get(FOLDERS_MANAGER_NAME);
575 574
    }
576 575

  
576
    /**
577
     * Registers the default Class implementing the BookmarksAndHistoryManager interface.
578
     *
579
     * @param clazz implementing the {@link BookmarksAndHistoryManager} interface
580
     */
581
    public static void registerDefaultBookmarksAndHistoryManager(Class clazz) {
582
        getInstance().registerDefault(BOOKMARKSANDHISTORY_MANAGER_NAME,
583
                BOOKMARKSANDHISTORY_MANAGER_DESCRIPTION, clazz);
584
    }
585

  
586
    /**
587
     * Registers the Class implementing the {@link BookmarksAndHistoryManager}
588
     * interface.
589
     *
590
     * @param clazz implementing the {@link BookmarksAndHistoryManager} interface
591
     */
592
    public static void registerBookmarksAndHistoryManager(Class clazz) {
593
        getInstance().register(BOOKMARKSANDHISTORY_MANAGER_NAME,
594
                BOOKMARKSANDHISTORY_MANAGER_DESCRIPTION, clazz);
595
    }
596

  
597
    /**
598
     * Return a reference to {@link BookmarksAndHistoryManager}.
599
     *
600
     * @return a reference to {@link BookmarksAndHistoryManager}
601
     * @throws LocatorException if there is no access to the class or the class
602
     * cannot be instantiated
603
     * @see Locator#get(String)
604
     */
605
    public static BookmarksAndHistoryManager getBookmarksAndHistoryManager()
606
            throws LocatorException {
607
        return (BookmarksAndHistoryManager) getInstance().get(BOOKMARKSANDHISTORY_MANAGER_NAME);
608
    }
609

  
610
    public static void registerComplementsManager(Class clazz) {
611
        getInstance().registerDefault(COMPLEMENTS_MANAGER_NAME,
612
                COMPLEMENTS_MANAGER_DESCRIPTION, clazz);
613
    }
614

  
615
    public static ComplementsManager getComplementsManager()
616
            throws LocatorException {
617
        return (ComplementsManager) getInstance().get(COMPLEMENTS_MANAGER_NAME);
618
    }
619

  
577 620
    public static void registerDefaultToolsLibraries() {
578 621
        ToolsLocator.registerDefaultOperationManager(DefaultOperationManager.class);
579 622
        ToolsLocator.registerDefaultTaskStatusManager(DefaultTaskStatusManager.class);
......
587 630
        ToolsLocator.registerDefaultFoldersManager(DefaultFoldersManager.class);
588 631
        ToolsLocator.registerDefaultPersistenceManager(ZipXMLPersistenceManager.class);
589 632
        ToolsLocator.registerComplementsManager(DefaultComplementsManager.class);
633
        ToolsLocator.registerDefaultBookmarksAndHistoryManager(DefaultBookmarksAndHistoryManager.class);
590 634
    }
591 635
    
592 636
    public static void initializeLibraries() {
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/bookmarksandhistory/impl/BaseBookmarks.java
27 27
        {
28 28

  
29 29
        private long lastUse;
30
        private boolean global;
30 31
        
31 32
        public BaseBookmark(String name, T value) {
32 33
            super(name, value);
......
34 35
        }
35 36
        
36 37
        @Override
38
        public boolean isGlobal() {
39
          return global;
40
        }
41

  
42
        @Override
43
        public void setGlobal(boolean global) {
44
          this.global = global;
45
        }
46

  
47
        @Override
37 48
        public final void used() {
38 49
            this.lastUse = new Date().getTime();
39 50
        }
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/bookmarksandhistory/impl/DefaultBookmarksAndHistoryManager.java
1
package org.gvsig.tools.bookmarksandhistory.impl;
2

  
3
import org.gvsig.tools.bookmarksandhistory.BookmarksAndHistoryManager;
4
import java.io.IOException;
5
import java.util.HashMap;
6
import java.util.List;
7
import java.util.Map;
8
import org.apache.commons.lang3.StringUtils;
9
import org.gvsig.tools.ToolsLocator;
10
import org.gvsig.tools.bookmarksandhistory.Bookmark;
11
import org.gvsig.tools.bookmarksandhistory.Bookmarks;
12
import org.gvsig.tools.bookmarksandhistory.History;
13
import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
14
import org.gvsig.tools.persistence.PersistenceManager;
15
import org.gvsig.tools.persistence.PersistentState;
16
import org.gvsig.tools.resourcesstorage.ResourcesStorage;
17

  
18
/**
19
 *
20
 * @author jjdelcerro
21
 */
22
public class DefaultBookmarksAndHistoryManager implements BookmarksAndHistoryManager {
23

  
24
  private final Map<String,Bookmarks<Object>> bookmarkGroups;
25
  private final Map<String,History<Object>> historyGroups;
26
  private ResourcesStorage primaryStorage;
27
  private ResourcesStorage secondaryStorage;
28
  
29
  public DefaultBookmarksAndHistoryManager() {
30
    this.bookmarkGroups = new HashMap<>();
31
    this.historyGroups = new HashMap<>();
32
  }
33

  
34
  @Override
35
  public ResourcesStorage getPrimaryStorage() {
36
    return primaryStorage;
37
  }
38

  
39
  @Override
40
  public ResourcesStorage getSecondaryStorage() {
41
    return secondaryStorage;
42
  }
43

  
44
  @Override
45
  public void setPrimaryStorage(ResourcesStorage primaryStorage) {
46
    this.primaryStorage = primaryStorage;
47
  }
48

  
49
  @Override
50
  public void setSecondaryStorage(ResourcesStorage secondaryStorage) {
51
    this.secondaryStorage = secondaryStorage;
52
  }
53

  
54
  @Override
55
  public void registerBookmarksGroup(String name, Bookmarks<Object> bookmarks) {
56
    this.bookmarkGroups.put(name, bookmarks);
57
  }
58
  
59
  @Override
60
  public void registerBookmarksGroup(String name) {
61
    this.bookmarkGroups.put(name, new BaseBookmarks<>());
62
  }
63
  
64
  @Override
65
  public Bookmarks<Object> getBookmarksGroup(String name) {
66
    return this.bookmarkGroups.get(name);
67
  }
68
  
69
  @Override
70
  public void registerHistoryGroup(String name, History<Object> history) {
71
    this.historyGroups.put(name, history);
72
  }
73
  
74
  @Override
75
  public void registerHistoryGroup(String name, int size) {
76
    this.historyGroups.put(name, new BaseHistory<>(size));
77
  }
78
  
79
  @Override
80
  public History<Object> getHistoryGroup(String name) {
81
    return this.historyGroups.get(name);
82
  }
83
  
84
  @Override
85
  public void save() {
86
    if( this.primaryStorage!=null ) {
87
      saveBookmarks(primaryStorage);
88
      saveHitory(primaryStorage);
89
    }
90
    if( this.secondaryStorage!=null ) {
91
      saveBookmarks(secondaryStorage);
92
      saveHitory(secondaryStorage);
93
    }
94
  }
95
  
96
  private void saveBookmarks(ResourcesStorage storage) {
97
    PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
98
    SimpleIdentityManager userManager = ToolsLocator.getIdentityManager();
99
    String userName = userManager.getCurrentIdentity().getID();
100
    for (Map.Entry<String, Bookmarks<Object>> bookmarksEntry : this.bookmarkGroups.entrySet()) {
101
      String bookmarksGroupName = bookmarksEntry.getKey();
102
      Bookmarks<Object> bookmarks = bookmarksEntry.getValue();
103
      for (Bookmark<Object> bookmark : bookmarks ) {
104
        String resourceName;
105
        if( bookmark.isGlobal() ) {
106
          resourceName = userName + "@BOOKMARKS!" + bookmarksGroupName+"!"+bookmark.getName();
107
        } else {
108
          resourceName = "ALL@BOOKMARKS!" + bookmarksGroupName+"!"+bookmark.getName();
109
        }
110
        try (ResourcesStorage.Resource resource = storage.getResource(resourceName)) {
111
          Object data = bookmark.getValue();
112
          PersistentState state = persistenceManager.getState(data);
113
          persistenceManager.saveState(state, resource.asOutputStream());
114
        } catch (Exception ex) {
115
          // ???
116
        }
117
      }
118
    }
119
  }
120
  
121
  @Override
122
  public void load() {
123
    if( this.primaryStorage!=null ) {
124
      loadBookmarks(primaryStorage);
125
      loadHistory(primaryStorage);
126
    }
127
    if( this.secondaryStorage!=null ) {
128
      loadBookmarks(secondaryStorage);
129
      loadHistory(secondaryStorage);
130
    }
131
  }
132

  
133
  private void loadBookmarks(ResourcesStorage storage) {
134
    PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
135
    SimpleIdentityManager userManager = ToolsLocator.getIdentityManager();
136
    String userName = userManager.getCurrentIdentity().getID();
137

  
138
    List<String> names = storage.getResourceNames();
139
    for (String name : names) {
140
      String[] userAndBookmark = StringUtils.split(name, "@");
141
      String currentUserName = userAndBookmark[0];
142
      String[] groupAndId = StringUtils.split(userAndBookmark[1], "!");
143
      if( groupAndId.length!=3 ) {
144
        continue;
145
      }
146
      String typeName = groupAndId[0];
147
      if( !StringUtils.equalsIgnoreCase(typeName, "BOOKMARKS") ) {
148
        continue;
149
      }
150
      String bookmarksGroupName = groupAndId[1];
151
      String bookmarkName = groupAndId[2];
152
      
153
      if( StringUtils.equalsIgnoreCase(currentUserName, userName) ) {
154
        try (ResourcesStorage.Resource resource = storage.getResource(name)) {
155
          Object data = persistenceManager.getObject(resource.asInputStream());
156
          Bookmarks<Object> bookmarks = this.bookmarkGroups.get(bookmarksGroupName);
157
          bookmarks.add(bookmarkName, data);
158
        } catch (IOException ex) {
159
          
160
        }
161
      } else if( StringUtils.equalsIgnoreCase(currentUserName, "ALL") ) {
162
        try (ResourcesStorage.Resource resource = storage.getResource(name)) {
163
          Object data = persistenceManager.getObject(resource.asInputStream());
164
          Bookmarks<Object> bookmarks = this.bookmarkGroups.get(bookmarksGroupName);
165
          Bookmark bookmark = bookmarks.add(bookmarkName, data);
166
          bookmark.setGlobal(true);
167
        } catch (IOException ex) {
168

  
169
        }
170
      }
171
    }
172
  }
173
  
174
  private void saveHitory(ResourcesStorage storage) {
175
    PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
176
    SimpleIdentityManager userManager = ToolsLocator.getIdentityManager();
177
    String userName = userManager.getCurrentIdentity().getID();
178

  
179
    for (Map.Entry<String, History<Object>> historyEntry : this.historyGroups.entrySet()) {
180
      String historyGroupName = historyEntry.getKey();
181
      History<Object> history = historyEntry.getValue();
182
      for (int i = 0; i < history.size(); i++) {
183
        String resourceName = userName + "@HISTORY!" + historyGroupName+"!"+i;
184
        try (ResourcesStorage.Resource resource = storage.getResource(resourceName)) {
185
          Object data = history.get(i);
186
          PersistentState state = persistenceManager.getState(data);
187
          persistenceManager.saveState(state, resource.asOutputStream());
188
        } catch (Exception ex) {
189
          // ???
190
        }
191
      }
192
    }
193
  }
194

  
195
  private void loadHistory(ResourcesStorage storage) {
196
    PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
197
    SimpleIdentityManager userManager = ToolsLocator.getIdentityManager();
198
    String userName = userManager.getCurrentIdentity().getID();
199

  
200
    List<String> names = storage.getResourceNames();
201
    for (String name : names) {
202
      String[] userAndHistory = StringUtils.split(name, "@");
203
      String currentUserName = userAndHistory[0];
204
      String[] groupAndId = StringUtils.split(userAndHistory[1], "!");
205
      if( groupAndId.length!=3 ) {
206
        continue;
207
      }
208
      String typeName = groupAndId[0];
209
      if( !StringUtils.equalsIgnoreCase(typeName, "HISTORY") ) {
210
        continue;
211
      }
212
      String groupName = groupAndId[1];
213
      
214
      if( StringUtils.equalsIgnoreCase(currentUserName, userName) ) {
215
        try (ResourcesStorage.Resource resource = storage.getResource(name)) {
216
          Object data = persistenceManager.getObject(resource.asInputStream());
217
          History<Object> history = this.historyGroups.get(groupName);
218
          history.add(data);
219
        } catch (IOException ex) {
220
          
221
        }
222
      }
223
    }
224
  }
225
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/bookmarksandhistory/Bookmark.java
17 17

  
18 18
    public long getLastUse();
19 19

  
20
//    public boolean isModifiable(); //GUI
20
    public boolean isGlobal();
21
    
22
    public void setGlobal(boolean global);
23
    
21 24
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/bookmarksandhistory/Bookmarks.java
1 1
package org.gvsig.tools.bookmarksandhistory;
2 2

  
3
import java.io.InputStream;
4
import java.io.OutputStream;
5 3
import java.util.List;
6 4
import java.util.function.Predicate;
7 5
import org.gvsig.tools.util.UnmodifiableBasicList;
......
28 26
    public boolean remove(String bookmarkName);
29 27
    
30 28
    public List<Bookmark<T>> filter(Predicate<Bookmark<T>> filter);
31
//    
32
//    public void save(OutputStream target, String... names);
33
//    
34
//    public void load(InputStream source, boolean overwrite);
35 29
    
36 30
}
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/bookmarksandhistory/BookmarksAndHistoryManager.java
1
package org.gvsig.tools.bookmarksandhistory;
2

  
3
import org.gvsig.tools.resourcesstorage.ResourcesStorage;
4

  
5
/**
6
 *
7
 * @author jjdelcerro
8
 */
9
public interface BookmarksAndHistoryManager {
10

  
11
  public Bookmarks<Object> getBookmarksGroup(String name);
12

  
13
  public History<Object> getHistoryGroup(String name);
14

  
15
  public ResourcesStorage getPrimaryStorage();
16

  
17
  public ResourcesStorage getSecondaryStorage();
18

  
19
  public void load();
20

  
21
  public void registerBookmarksGroup(String name, Bookmarks<Object> bookmarks);
22

  
23
  public void registerBookmarksGroup(String name);
24

  
25
  public void registerHistoryGroup(String name, History<Object> history);
26

  
27
  public void registerHistoryGroup(String name, int size);
28

  
29
  public void save();
30

  
31
  public void setPrimaryStorage(ResourcesStorage primaryStorage);
32

  
33
  public void setSecondaryStorage(ResourcesStorage secondaryStorage);
34
  
35
}

Also available in: Unified diff