Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.lib / src / main / java / org / gvsig / tools / bookmarksandhistory / impl / DefaultBookmarksAndHistoryManager.java @ 2143

History | View | Annotate | Download (8.08 KB)

1
package org.gvsig.tools.bookmarksandhistory.impl;
2

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

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

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

    
35
  @Override
36
  public boolean existsBookmarksGroup(String name) {
37
    return this.bookmarkGroups.containsKey(name);
38
  }
39

    
40
  @Override
41
  public Collection<String> getBookmarkNames() {
42
    return this.bookmarkGroups.keySet();
43
  }
44

    
45
  @Override
46
  public ResourcesStorage getPrimaryStorage() {
47
    return primaryStorage;
48
  }
49

    
50
  @Override
51
  public ResourcesStorage getSecondaryStorage() {
52
    return secondaryStorage;
53
  }
54

    
55
  @Override
56
  public void setPrimaryStorage(ResourcesStorage primaryStorage) {
57
    this.primaryStorage = primaryStorage;
58
  }
59

    
60
  @Override
61
  public void setSecondaryStorage(ResourcesStorage secondaryStorage) {
62
    this.secondaryStorage = secondaryStorage;
63
  }
64

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

    
144
  private void loadBookmarks(ResourcesStorage storage) {
145
    PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
146
    SimpleIdentityManager userManager = ToolsLocator.getIdentityManager();
147
    String userName = userManager.getCurrentIdentity().getID();
148

    
149
    List<String> names = storage.getResourceNames();
150
    for (String name : names) {
151
      String[] userAndBookmark = StringUtils.split(name, "@");
152
      String currentUserName = userAndBookmark[0];
153
      String[] groupAndId = StringUtils.split(userAndBookmark[1], "!");
154
      if( groupAndId.length!=3 ) {
155
        continue;
156
      }
157
      String typeName = groupAndId[0];
158
      if( !StringUtils.equalsIgnoreCase(typeName, "BOOKMARKS") ) {
159
        continue;
160
      }
161
      String bookmarksGroupName = groupAndId[1];
162
      String bookmarkName = groupAndId[2];
163
      
164
      if( StringUtils.equalsIgnoreCase(currentUserName, userName) ) {
165
        try (ResourcesStorage.Resource resource = storage.getResource(name)) {
166
          Object data = persistenceManager.getObject(resource.asInputStream());
167
          Bookmarks<Object> bookmarks = this.bookmarkGroups.get(bookmarksGroupName);
168
          bookmarks.add(bookmarkName, data);
169
        } catch (IOException ex) {
170
          
171
        }
172
      } else if( StringUtils.equalsIgnoreCase(currentUserName, "ALL") ) {
173
        try (ResourcesStorage.Resource resource = storage.getResource(name)) {
174
          Object data = persistenceManager.getObject(resource.asInputStream());
175
          Bookmarks<Object> bookmarks = this.bookmarkGroups.get(bookmarksGroupName);
176
          Bookmark bookmark = bookmarks.add(bookmarkName, data);
177
          bookmark.setGlobal(true);
178
        } catch (IOException ex) {
179

    
180
        }
181
      }
182
    }
183
  }
184
  
185
  private void saveHitory(ResourcesStorage storage) {
186
    PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
187
    SimpleIdentityManager userManager = ToolsLocator.getIdentityManager();
188
    String userName = userManager.getCurrentIdentity().getID();
189

    
190
    for (Map.Entry<String, History<Object>> historyEntry : this.historyGroups.entrySet()) {
191
      String historyGroupName = historyEntry.getKey();
192
      History<Object> history = historyEntry.getValue();
193
      for (int i = 0; i < history.size(); i++) {
194
        String resourceName = userName + "@HISTORY!" + historyGroupName+"!"+i;
195
        try (ResourcesStorage.Resource resource = storage.getResource(resourceName)) {
196
          Object data = history.get(i);
197
          PersistentState state = persistenceManager.getState(data);
198
          persistenceManager.saveState(state, resource.asOutputStream());
199
        } catch (Exception ex) {
200
          // ???
201
        }
202
      }
203
    }
204
  }
205

    
206
  private void loadHistory(ResourcesStorage storage) {
207
    PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
208
    SimpleIdentityManager userManager = ToolsLocator.getIdentityManager();
209
    String userName = userManager.getCurrentIdentity().getID();
210

    
211
    List<String> names = storage.getResourceNames();
212
    for (String name : names) {
213
      String[] userAndHistory = StringUtils.split(name, "@");
214
      String currentUserName = userAndHistory[0];
215
      String[] groupAndId = StringUtils.split(userAndHistory[1], "!");
216
      if( groupAndId.length!=3 ) {
217
        continue;
218
      }
219
      String typeName = groupAndId[0];
220
      if( !StringUtils.equalsIgnoreCase(typeName, "HISTORY") ) {
221
        continue;
222
      }
223
      String groupName = groupAndId[1];
224
      
225
      if( StringUtils.equalsIgnoreCase(currentUserName, userName) ) {
226
        try (ResourcesStorage.Resource resource = storage.getResource(name)) {
227
          Object data = persistenceManager.getObject(resource.asInputStream());
228
          History<Object> history = this.historyGroups.get(groupName);
229
          history.add(data);
230
        } catch (IOException ex) {
231
          
232
        }
233
      }
234
    }
235
  }
236
}