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 @ 2142

History | View | Annotate | Download (7.83 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.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
}