1 16 package org.outerj.daisy.repository.clientimpl; 17 18 import org.outerj.daisy.jms.JmsClient; 19 import org.outerj.daisy.repository.RepositoryListener; 20 import org.outerj.daisy.repository.RepositoryEventType; 21 import org.outerj.daisy.repository.DocumentVariantEventType; 22 import org.outerj.daisy.repository.schema.RepositorySchemaListener; 23 import org.outerj.daisy.repository.schema.RepositorySchemaEventType; 24 import org.outerj.daisy.xmlutil.LocalSAXParserFactory; 25 import org.outerx.daisy.x10.*; 26 import org.apache.avalon.framework.logger.Logger; 27 import org.apache.xmlbeans.XmlOptions; 28 29 import javax.jms.MessageListener ; 30 import javax.jms.Message ; 31 import javax.jms.TextMessage ; 32 import java.io.StringReader ; 33 import java.util.*; 34 35 39 public class RemoteEventDispatcher { 40 private Logger logger; 41 private List repositoryListeners = new ArrayList(); 42 private List repositorySchemaListeners = new ArrayList(); 43 private static final Map messageHandlers = new HashMap(); 44 static { 45 messageHandlers.put("DocumentCreated", new MessageHandler() { 46 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 47 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 48 DocumentCreatedDocument.DocumentCreated documentCreated = DocumentCreatedDocument.Factory.parse(new StringReader (text), xmlOptions).getDocumentCreated(); 49 DocumentDocument.Document documentXml = documentCreated.getNewDocument().getDocument(); 50 dispatcher.engenderRepositoryEvent(RepositoryEventType.DOCUMENT_CREATED, documentXml.getId(), documentXml.getUpdateCount()); 51 } 52 }); 53 messageHandlers.put("DocumentUpdated", new MessageHandler() { 54 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 55 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 56 DocumentUpdatedDocument.DocumentUpdated documentUpdated = DocumentUpdatedDocument.Factory.parse(new StringReader (text), xmlOptions).getDocumentUpdated(); 57 DocumentDocument.Document documentXml = documentUpdated.getNewDocument().getDocument(); 58 dispatcher.engenderRepositoryEvent(RepositoryEventType.DOCUMENT_UPDATED, documentXml.getId(), documentXml.getUpdateCount()); 59 } 60 }); 61 messageHandlers.put("DocumentDeleted", new MessageHandler() { 62 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 63 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 64 DocumentDeletedDocument.DocumentDeleted documentDeleted = DocumentDeletedDocument.Factory.parse(new StringReader (text), xmlOptions).getDocumentDeleted(); 65 DocumentDocument.Document documentXml = documentDeleted.getDeletedDocument().getDocument(); 66 dispatcher.engenderRepositoryEvent(RepositoryEventType.DOCUMENT_DELETED, documentXml.getId(), documentXml.getUpdateCount()); 67 } 68 }); 69 messageHandlers.put("UserCreated", new MessageHandler() { 70 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 71 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 72 UserCreatedDocument.UserCreated userCreated = UserCreatedDocument.Factory.parse(new StringReader (text), xmlOptions).getUserCreated(); 73 UserDocument.User userXml = userCreated.getNewUser().getUser(); 74 dispatcher.engenderRepositoryEvent(RepositoryEventType.USER_CREATED, userXml.getId(), userXml.getUpdateCount()); 75 } 76 }); 77 messageHandlers.put("UserUpdated", new MessageHandler() { 78 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 79 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 80 UserUpdatedDocument.UserUpdated userUpdated = UserUpdatedDocument.Factory.parse(new StringReader (text), xmlOptions).getUserUpdated(); 81 UserDocument.User userXml = userUpdated.getNewUser().getUser(); 82 dispatcher.engenderRepositoryEvent(RepositoryEventType.USER_UPDATED, userXml.getId(), userXml.getUpdateCount()); 83 } 84 }); 85 messageHandlers.put("UserDeleted", new MessageHandler() { 86 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 87 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 88 UserDeletedDocument.UserDeleted userDeleted = UserDeletedDocument.Factory.parse(new StringReader (text), xmlOptions).getUserDeleted(); 89 dispatcher.engenderRepositoryEvent(RepositoryEventType.USER_DELETED, userDeleted.getDeletedUser().getUser().getId(), -1); 90 } 91 }); 92 messageHandlers.put("RoleCreated", new MessageHandler() { 93 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 94 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 95 RoleCreatedDocument.RoleCreated roleCreated = RoleCreatedDocument.Factory.parse(new StringReader (text), xmlOptions).getRoleCreated(); 96 RoleDocument.Role roleXml = roleCreated.getNewRole().getRole(); 97 dispatcher.engenderRepositoryEvent(RepositoryEventType.ROLE_CREATED, roleXml.getId(), roleXml.getUpdateCount()); 98 } 99 }); 100 messageHandlers.put("RoleUpdated", new MessageHandler() { 101 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 102 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 103 RoleUpdatedDocument.RoleUpdated roleUpdated = RoleUpdatedDocument.Factory.parse(new StringReader (text), xmlOptions).getRoleUpdated(); 104 RoleDocument.Role roleXml = roleUpdated.getNewRole().getRole(); 105 dispatcher.engenderRepositoryEvent(RepositoryEventType.ROLE_UPDATED, roleXml.getId(), roleXml.getUpdateCount()); 106 } 107 }); 108 messageHandlers.put("RoleDeleted", new MessageHandler() { 109 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 110 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 111 RoleDeletedDocument.RoleDeleted roleDeleted = RoleDeletedDocument.Factory.parse(new StringReader (text), xmlOptions).getRoleDeleted(); 112 dispatcher.engenderRepositoryEvent(RepositoryEventType.ROLE_DELETED, roleDeleted.getDeletedRole().getRole().getId(), -1); 113 } 114 }); 115 messageHandlers.put("VersionStateChanged", new MessageHandler() { 116 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 117 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 118 VersionStateChangedDocument.VersionStateChanged versionStateChanged = VersionStateChangedDocument.Factory.parse(new StringReader (text), xmlOptions).getVersionStateChanged(); 119 dispatcher.engenderDocumentVariantEvent(DocumentVariantEventType.VERSION_STATE_CHANGED, versionStateChanged.getDocumentId(), versionStateChanged.getBranchId(), versionStateChanged.getLanguageId(), -1); 120 } 121 }); 122 messageHandlers.put("CollectionCreated", new MessageHandler() { 123 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 124 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 125 CollectionCreatedDocument.CollectionCreated collectionCreated = CollectionCreatedDocument.Factory.parse(new StringReader (text), xmlOptions).getCollectionCreated(); 126 CollectionDocument.Collection collectionXml = collectionCreated.getNewCollection().getCollection(); 127 dispatcher.engenderRepositoryEvent(RepositoryEventType.COLLECTION_CREATED, collectionXml.getId(), collectionXml.getUpdatecount()); 128 } 129 }); 130 messageHandlers.put("CollectionUpdated", new MessageHandler() { 131 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 132 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 133 CollectionUpdatedDocument.CollectionUpdated collectionUpdated = CollectionUpdatedDocument.Factory.parse(new StringReader (text), xmlOptions).getCollectionUpdated(); 134 CollectionDocument.Collection collectionXml = collectionUpdated.getNewCollection().getCollection(); 135 dispatcher.engenderRepositoryEvent(RepositoryEventType.COLLECTION_UPDATED, collectionXml.getId(), collectionXml.getUpdatecount()); 136 } 137 }); 138 messageHandlers.put("CollectionDeleted", new MessageHandler() { 139 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 140 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 141 CollectionDeletedDocument.CollectionDeleted collectionDeleted = CollectionDeletedDocument.Factory.parse(new StringReader (text), xmlOptions).getCollectionDeleted(); 142 dispatcher.engenderRepositoryEvent(RepositoryEventType.COLLECTION_DELETED, collectionDeleted.getDeletedCollection().getCollection().getId(), -1); 143 } 144 }); 145 messageHandlers.put("DocumentTypeCreated", new MessageHandler() { 146 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 147 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 148 DocumentTypeCreatedDocument.DocumentTypeCreated documentTypeCreated = DocumentTypeCreatedDocument.Factory.parse(new StringReader (text), xmlOptions).getDocumentTypeCreated(); 149 DocumentTypeDocument.DocumentType documentTypeXml = documentTypeCreated.getNewDocumentType().getDocumentType(); 150 dispatcher.engenderRepositorySchemaEvent(RepositorySchemaEventType.DOCUMENT_TYPE_CREATED, documentTypeXml.getId(), documentTypeXml.getUpdateCount()); 151 } 152 }); 153 messageHandlers.put("DocumentTypeUpdated", new MessageHandler() { 154 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 155 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 156 DocumentTypeUpdatedDocument.DocumentTypeUpdated documentTypeUpdated = DocumentTypeUpdatedDocument.Factory.parse(new StringReader (text), xmlOptions).getDocumentTypeUpdated(); 157 DocumentTypeDocument.DocumentType documentTypeXml = documentTypeUpdated.getNewDocumentType().getDocumentType(); 158 dispatcher.engenderRepositorySchemaEvent(RepositorySchemaEventType.DOCUMENT_TYPE_UPDATED, documentTypeXml.getId(), documentTypeXml.getUpdateCount()); 159 } 160 }); 161 messageHandlers.put("DocumentTypeDeleted", new MessageHandler() { 162 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 163 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 164 DocumentTypeDeletedDocument.DocumentTypeDeleted documentTypeDeleted = DocumentTypeDeletedDocument.Factory.parse(new StringReader (text), xmlOptions).getDocumentTypeDeleted(); 165 DocumentTypeDocument.DocumentType documentTypeXml = documentTypeDeleted.getDeletedDocumentType().getDocumentType(); 166 dispatcher.engenderRepositorySchemaEvent(RepositorySchemaEventType.DOCUMENT_TYPE_DELETED, documentTypeXml.getId(), documentTypeXml.getUpdateCount()); 167 } 168 }); 169 messageHandlers.put("PartTypeCreated", new MessageHandler() { 170 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 171 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 172 PartTypeCreatedDocument.PartTypeCreated partTypeCreated = PartTypeCreatedDocument.Factory.parse(new StringReader (text), xmlOptions).getPartTypeCreated(); 173 PartTypeDocument.PartType partTypeXml = partTypeCreated.getNewPartType().getPartType(); 174 dispatcher.engenderRepositorySchemaEvent(RepositorySchemaEventType.PART_TYPE_CREATED, partTypeXml.getId(), partTypeXml.getUpdateCount()); 175 } 176 }); 177 messageHandlers.put("PartTypeUpdated", new MessageHandler() { 178 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 179 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 180 PartTypeUpdatedDocument.PartTypeUpdated partTypeUpdated = PartTypeUpdatedDocument.Factory.parse(new StringReader (text), xmlOptions).getPartTypeUpdated(); 181 PartTypeDocument.PartType partTypeXml = partTypeUpdated.getNewPartType().getPartType(); 182 dispatcher.engenderRepositorySchemaEvent(RepositorySchemaEventType.PART_TYPE_UPDATED, partTypeXml.getId(), partTypeXml.getUpdateCount()); 183 } 184 }); 185 messageHandlers.put("PartTypeDeleted", new MessageHandler() { 186 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 187 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 188 PartTypeDeletedDocument.PartTypeDeleted partTypeDeleted = PartTypeDeletedDocument.Factory.parse(new StringReader (text), xmlOptions).getPartTypeDeleted(); 189 PartTypeDocument.PartType partTypeXml = partTypeDeleted.getDeletedPartType().getPartType(); 190 dispatcher.engenderRepositorySchemaEvent(RepositorySchemaEventType.PART_TYPE_DELETED, partTypeXml.getId(), partTypeXml.getUpdateCount()); 191 } 192 }); 193 messageHandlers.put("FieldTypeCreated", new MessageHandler() { 194 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 195 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 196 FieldTypeCreatedDocument.FieldTypeCreated fieldTypeCreated = FieldTypeCreatedDocument.Factory.parse(new StringReader (text), xmlOptions).getFieldTypeCreated(); 197 FieldTypeDocument.FieldType fieldTypeXml = fieldTypeCreated.getNewFieldType().getFieldType(); 198 dispatcher.engenderRepositorySchemaEvent(RepositorySchemaEventType.FIELD_TYPE_CREATED, fieldTypeXml.getId(), fieldTypeXml.getUpdateCount()); 199 } 200 }); 201 messageHandlers.put("FieldTypeUpdated", new MessageHandler() { 202 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 203 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 204 FieldTypeUpdatedDocument.FieldTypeUpdated fieldTypeUpdated = FieldTypeUpdatedDocument.Factory.parse(new StringReader (text), xmlOptions).getFieldTypeUpdated(); 205 FieldTypeDocument.FieldType fieldTypeXml = fieldTypeUpdated.getNewFieldType().getFieldType(); 206 dispatcher.engenderRepositorySchemaEvent(RepositorySchemaEventType.FIELD_TYPE_UPDATED, fieldTypeXml.getId(), fieldTypeXml.getUpdateCount()); 207 } 208 }); 209 messageHandlers.put("FieldTypeDeleted", new MessageHandler() { 210 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 211 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 212 FieldTypeDeletedDocument.FieldTypeDeleted fieldTypeDeleted = FieldTypeDeletedDocument.Factory.parse(new StringReader (text), xmlOptions).getFieldTypeDeleted(); 213 FieldTypeDocument.FieldType fieldTypeXml = fieldTypeDeleted.getDeletedFieldType().getFieldType(); 214 dispatcher.engenderRepositorySchemaEvent(RepositorySchemaEventType.FIELD_TYPE_DELETED, fieldTypeXml.getId(), fieldTypeXml.getUpdateCount()); 215 } 216 }); 217 messageHandlers.put("BranchCreated", new MessageHandler() { 218 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 219 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 220 BranchCreatedDocument.BranchCreated branchCreated = BranchCreatedDocument.Factory.parse(new StringReader (text), xmlOptions).getBranchCreated(); 221 BranchDocument.Branch branchXml = branchCreated.getNewBranch().getBranch(); 222 dispatcher.engenderRepositoryEvent(RepositoryEventType.BRANCH_CREATED, branchXml.getId(), branchXml.getUpdateCount()); 223 } 224 }); 225 messageHandlers.put("BranchUpdated", new MessageHandler() { 226 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 227 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 228 BranchUpdatedDocument.BranchUpdated branchUpdated = BranchUpdatedDocument.Factory.parse(new StringReader (text), xmlOptions).getBranchUpdated(); 229 BranchDocument.Branch branchXml = branchUpdated.getNewBranch().getBranch(); 230 dispatcher.engenderRepositoryEvent(RepositoryEventType.BRANCH_UPDATED, branchXml.getId(), branchXml.getUpdateCount()); 231 } 232 }); 233 messageHandlers.put("BranchDeleted", new MessageHandler() { 234 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 235 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 236 BranchDeletedDocument.BranchDeleted branchDeleted = BranchDeletedDocument.Factory.parse(new StringReader (text), xmlOptions).getBranchDeleted(); 237 BranchDocument.Branch branchXml = branchDeleted.getDeletedBranch().getBranch(); 238 dispatcher.engenderRepositoryEvent(RepositoryEventType.BRANCH_DELETED, branchXml.getId(), branchXml.getUpdateCount()); 239 } 240 }); 241 messageHandlers.put("LanguageCreated", new MessageHandler() { 242 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 243 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 244 LanguageCreatedDocument.LanguageCreated languageCreated = LanguageCreatedDocument.Factory.parse(new StringReader (text), xmlOptions).getLanguageCreated(); 245 LanguageDocument.Language languageXml = languageCreated.getNewLanguage().getLanguage(); 246 dispatcher.engenderRepositoryEvent(RepositoryEventType.LANGUAGE_CREATED, languageXml.getId(), languageXml.getUpdateCount()); 247 } 248 }); 249 messageHandlers.put("LanguageUpdated", new MessageHandler() { 250 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 251 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 252 LanguageUpdatedDocument.LanguageUpdated languageUpdated = LanguageUpdatedDocument.Factory.parse(new StringReader (text), xmlOptions).getLanguageUpdated(); 253 LanguageDocument.Language languageXml = languageUpdated.getNewLanguage().getLanguage(); 254 dispatcher.engenderRepositoryEvent(RepositoryEventType.LANGUAGE_UPDATED, languageXml.getId(), languageXml.getUpdateCount()); 255 } 256 }); 257 messageHandlers.put("LangaugeDeleted", new MessageHandler() { 258 public void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception { 259 XmlOptions xmlOptions = new XmlOptions().setLoadUseXMLReader(LocalSAXParserFactory.newXmlReader()); 260 LanguageDeletedDocument.LanguageDeleted languageDeleted = LanguageDeletedDocument.Factory.parse(new StringReader (text), xmlOptions).getLanguageDeleted(); 261 LanguageDocument.Language languageXml = languageDeleted.getDeletedLanguage().getLanguage(); 262 dispatcher.engenderRepositoryEvent(RepositoryEventType.LANGUAGE_DELETED, languageXml.getId(), languageXml.getUpdateCount()); 263 } 264 }); 265 } 266 267 public RemoteEventDispatcher(JmsClient jmsClient, String jmsTopic, Logger logger) throws Exception { 268 this.logger = logger; 269 jmsClient.registerListener(jmsTopic, new MyMessageListener()); 270 } 271 272 public Logger getLogger() { 273 return logger; 274 } 275 276 interface MessageHandler { 277 void handleMessage(String text, RemoteEventDispatcher dispatcher) throws Exception ; 278 } 279 280 class MyMessageListener implements MessageListener { 281 public void onMessage(Message aMessage) { 282 try { 283 TextMessage message = (TextMessage )aMessage; 284 String type = message.getStringProperty("type"); 285 286 MessageHandler handler = (MessageHandler)messageHandlers.get(type); 287 if (handler != null) 288 handler.handleMessage(message.getText(), RemoteEventDispatcher.this); 289 290 } catch (Exception e) { 291 getLogger().error("Error dispatching daisy JMS event.", e); 292 } 293 } 294 } 295 296 private void engenderRepositoryEvent(RepositoryEventType type, long id, long updateCount) { 297 Iterator it = repositoryListeners.iterator(); 298 while (it.hasNext()) { 299 RepositoryListener listener = (RepositoryListener)it.next(); 300 listener.repositoryEvent(type, id, updateCount); 301 } 302 } 303 304 private void engenderDocumentVariantEvent(DocumentVariantEventType type, long documentId, long branchId, long languageId, long updateCount) { 305 Iterator it = repositoryListeners.iterator(); 306 while (it.hasNext()) { 307 RepositoryListener listener = (RepositoryListener)it.next(); 308 listener.variantEvent(type, documentId, branchId, languageId, updateCount); 309 } 310 } 311 312 private void engenderRepositorySchemaEvent(RepositorySchemaEventType type, long id, long updateCount) { 313 Iterator it = repositorySchemaListeners.iterator(); 314 while (it.hasNext()) { 315 RepositorySchemaListener listener = (RepositorySchemaListener)it.next(); 316 listener.modelChange(type, id, updateCount); 317 } 318 } 319 320 public void addRepositoryListener(RepositoryListener repositoryListener) { 321 repositoryListeners.add(repositoryListener); 322 } 323 324 public void removeRepositoryListener(RepositoryListener repositoryListener) { 325 repositoryListeners.remove(repositoryListener); 326 } 327 328 public void addRepositorySchemaListener(RepositorySchemaListener repositorySchemaListener) { 329 repositorySchemaListeners.add(repositorySchemaListener); 330 } 331 332 public void removeRepositorySchemaListener(RepositorySchemaListener repositorySchemaListener) { 333 repositorySchemaListeners.remove(repositorySchemaListener); 334 } 335 } 336 | Popular Tags |