diff options
Diffstat (limited to 'plugins/org.eclipse.osee.framework.manager.servlet/src/org/eclipse/osee/framework/manager/servlet/OseeCacheServlet.java')
-rw-r--r-- | plugins/org.eclipse.osee.framework.manager.servlet/src/org/eclipse/osee/framework/manager/servlet/OseeCacheServlet.java | 388 |
1 files changed, 194 insertions, 194 deletions
diff --git a/plugins/org.eclipse.osee.framework.manager.servlet/src/org/eclipse/osee/framework/manager/servlet/OseeCacheServlet.java b/plugins/org.eclipse.osee.framework.manager.servlet/src/org/eclipse/osee/framework/manager/servlet/OseeCacheServlet.java index 27daf38df34..73b0ef81294 100644 --- a/plugins/org.eclipse.osee.framework.manager.servlet/src/org/eclipse/osee/framework/manager/servlet/OseeCacheServlet.java +++ b/plugins/org.eclipse.osee.framework.manager.servlet/src/org/eclipse/osee/framework/manager/servlet/OseeCacheServlet.java @@ -55,199 +55,199 @@ import org.eclipse.osee.framework.manager.servlet.internal.Activator; */ public class OseeCacheServlet extends UnsecuredOseeHttpServlet { - private static final long serialVersionUID = 6693534844874109524L; - private final IDataTranslationService translationService; - private final IOseeCachingService cachingService; - private final IOseeModelFactoryService factoryService; - private final ISessionManager sessionManager; - - public OseeCacheServlet(ISessionManager sessionManager, IDataTranslationService translationService, IOseeCachingService cachingService, IOseeModelFactoryService factoryService) { - super(); - this.sessionManager = sessionManager; - this.translationService = translationService; - this.cachingService = cachingService; - this.factoryService = factoryService; - } - - public IDataTranslationService getTranslationService() { - return translationService; - } - - public IOseeCachingService getCachingService() { - return cachingService; - } - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) { - OseeCacheEnum cacheId = OseeCacheEnum.valueOf(req.getParameter("cacheId")); - try { - IOseeCachingService caching = getCachingService(); - IDataTranslationService service = getTranslationService(); - Pair<Object, ITranslatorId> pair = createResponse(true, new CacheUpdateRequest(cacheId), caching); - resp.setStatus(HttpServletResponse.SC_ACCEPTED); - resp.setContentType("text/xml"); - resp.setCharacterEncoding("UTF-8"); - InputStream inputStream = service.convertToStream(pair.getFirst(), pair.getSecond()); - OutputStream outputStream = resp.getOutputStream(); - Lib.inputStreamToOutputStream(inputStream, outputStream); - } catch (Exception ex) { - OseeLog.log(getClass(), Level.SEVERE, ex); - } - } - - @Override - protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { - try { - String sessionId = req.getParameter("sessionId"); - String clientVersion = ModCompatible.getClientVersion(sessionManager, sessionId); - boolean isCompatible = ModCompatible.is_0_9_2_Compatible(clientVersion); - - CacheOperation operation = CacheOperation.fromString(req.getParameter("function")); - switch (operation) { - case UPDATE: - sendUpdates(isCompatible, req, resp); - break; - case STORE: - storeUpdates(isCompatible, req, resp); - break; - default: - throw new UnsupportedOperationException(); - } - } catch (Exception ex) { - handleError(resp, req.toString(), ex); - } - } - - private void handleError(HttpServletResponse resp, String request, Throwable th) throws IOException { - OseeLog.log(Activator.class, Level.SEVERE, String.format("Osee Cache request error: [%s]", request), th); - resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - resp.setContentType("text/plain"); - resp.getWriter().write(Lib.exceptionToString(th)); - resp.getWriter().flush(); - resp.getWriter().close(); - } - - private void storeUpdates(boolean isCompatible, HttpServletRequest req, HttpServletResponse resp) throws OseeCoreException { - IDataTranslationService service = getTranslationService(); - IOseeCachingService caching = getCachingService(); - TransactionCache txCache = caching.getTransactionCache(); - - BranchCacheStoreRequest updateRequest = null; - InputStream inputStream = null; - try { - inputStream = req.getInputStream(); - updateRequest = service.convert(inputStream, CoreTranslatorId.BRANCH_CACHE_STORE_REQUEST); - } catch (IOException ex) { - OseeExceptions.wrapAndThrow(ex); - } finally { - Lib.close(inputStream); - } - Collection<Branch> updated = - new BranchCacheUpdateUtil(factoryService.getBranchFactory(), txCache).updateCache(updateRequest, - caching.getBranchCache()); - - BranchCache cache = caching.getBranchCache(); - if (updateRequest.isServerUpdateMessage()) { - for (Branch branch : updated) { - if (StorageState.CREATED == branch.getStorageState()) { - branch.setStorageState(StorageState.MODIFIED); - } - branch.clearDirty(); - cache.decache(branch); - cache.cache(branch); - } - } else { - cache.storeItems(updated); - } - try { - resp.setStatus(HttpServletResponse.SC_ACCEPTED); - resp.setContentType("text/plain"); - resp.setCharacterEncoding("UTF-8"); - resp.getWriter().write("Branch Store Successful"); - } catch (IOException ex) { - OseeExceptions.wrapAndThrow(ex); - } - } - - private void sendUpdates(boolean isCompatible, HttpServletRequest req, HttpServletResponse resp) throws OseeCoreException { - IDataTranslationService service = getTranslationService(); - IOseeCachingService caching = getCachingService(); - - CacheUpdateRequest updateRequest = null; - InputStream inputStream = null; - try { - inputStream = req.getInputStream(); - updateRequest = service.convert(inputStream, CoreTranslatorId.OSEE_CACHE_UPDATE_REQUEST); - } catch (IOException ex) { - OseeExceptions.wrapAndThrow(ex); - } finally { - Lib.close(inputStream); - } - - OutputStream outputStream = null; - try { - Pair<Object, ITranslatorId> pair = createResponse(isCompatible, updateRequest, caching); - - resp.setStatus(HttpServletResponse.SC_ACCEPTED); - resp.setContentType("text/xml"); - resp.setCharacterEncoding("UTF-8"); - - ModCompatible.makeSendCompatible(isCompatible, pair.getFirst()); - - inputStream = service.convertToStream(pair.getFirst(), pair.getSecond()); - outputStream = resp.getOutputStream(); - Lib.inputStreamToOutputStream(inputStream, outputStream); - } catch (IOException ex) { - OseeExceptions.wrapAndThrow(ex); - } - } - - private Pair<Object, ITranslatorId> createResponse(boolean isCompatible, CacheUpdateRequest updateRequest, IOseeCachingService caching) throws OseeCoreException { - Conditions.checkNotNull(caching, "caching service"); - Object response = null; - ITranslatorId transalatorId = null; - switch (updateRequest.getCacheId()) { - case BRANCH_CACHE: - response = BranchCacheUpdateResponse.fromCache(caching.getBranchCache(), caching.getBranchCache().getAll()); - transalatorId = CoreTranslatorId.BRANCH_CACHE_UPDATE_RESPONSE; - break; - case TRANSACTION_CACHE: - Collection<TransactionRecord> record; - TransactionCache txCache = caching.getTransactionCache(); - - if (updateRequest.getItemsIds().isEmpty()) { - record = txCache.getAll(); - } else { - record = new ArrayList<TransactionRecord>(); - for (Integer item : updateRequest.getItemsIds()) { - record.add(txCache.getOrLoad(item)); - } - } - response = TransactionCacheUpdateResponse.fromCache(factoryService.getTransactionFactory(), record); - transalatorId = CoreTranslatorId.TX_CACHE_UPDATE_RESPONSE; - break; - case ARTIFACT_TYPE_CACHE: - response = ArtifactTypeCacheUpdateResponse.fromCache(caching.getArtifactTypeCache().getAll()); - transalatorId = CoreTranslatorId.ARTIFACT_TYPE_CACHE_UPDATE_RESPONSE; - break; - case ATTRIBUTE_TYPE_CACHE: - response = - AttributeTypeCacheUpdateResponse.fromCache(factoryService.getAttributeTypeFactory(), - caching.getAttributeTypeCache().getAll()); - transalatorId = CoreTranslatorId.ATTRIBUTE_TYPE_CACHE_UPDATE_RESPONSE; - break; - case OSEE_ENUM_TYPE_CACHE: - response = OseeEnumTypeCacheUpdateResponse.fromCache(caching.getEnumTypeCache().getAll()); - transalatorId = CoreTranslatorId.OSEE_ENUM_TYPE_CACHE_UPDATE_RESPONSE; - break; - case RELATION_TYPE_CACHE: - response = RelationTypeCacheUpdateResponse.fromCache(caching.getRelationTypeCache().getAll()); - transalatorId = CoreTranslatorId.RELATION_TYPE_CACHE_UPDATE_RESPONSE; - break; - default: - throw new OseeArgumentException(String.format("Invalid cacheId [%s]", updateRequest.getCacheId())); - } - return new Pair<Object, ITranslatorId>(response, transalatorId); - } + private static final long serialVersionUID = 6693534844874109524L; + private final IDataTranslationService translationService; + private final IOseeCachingService cachingService; + private final IOseeModelFactoryService factoryService; + private final ISessionManager sessionManager; + + public OseeCacheServlet(ISessionManager sessionManager, IDataTranslationService translationService, IOseeCachingService cachingService, IOseeModelFactoryService factoryService) { + super(); + this.sessionManager = sessionManager; + this.translationService = translationService; + this.cachingService = cachingService; + this.factoryService = factoryService; + } + + public IDataTranslationService getTranslationService() { + return translationService; + } + + public IOseeCachingService getCachingService() { + return cachingService; + } + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) { + OseeCacheEnum cacheId = OseeCacheEnum.valueOf(req.getParameter("cacheId")); + try { + IOseeCachingService caching = getCachingService(); + IDataTranslationService service = getTranslationService(); + Pair<Object, ITranslatorId> pair = createResponse(true, new CacheUpdateRequest(cacheId), caching); + resp.setStatus(HttpServletResponse.SC_ACCEPTED); + resp.setContentType("text/xml"); + resp.setCharacterEncoding("UTF-8"); + InputStream inputStream = service.convertToStream(pair.getFirst(), pair.getSecond()); + OutputStream outputStream = resp.getOutputStream(); + Lib.inputStreamToOutputStream(inputStream, outputStream); + } catch (Exception ex) { + OseeLog.log(getClass(), Level.SEVERE, ex); + } + } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { + try { + String sessionId = req.getParameter("sessionId"); + String clientVersion = ModCompatible.getClientVersion(sessionManager, sessionId); + boolean isCompatible = ModCompatible.is_0_9_2_Compatible(clientVersion); + + CacheOperation operation = CacheOperation.fromString(req.getParameter("function")); + switch (operation) { + case UPDATE: + sendUpdates(isCompatible, req, resp); + break; + case STORE: + storeUpdates(isCompatible, req, resp); + break; + default: + throw new UnsupportedOperationException(); + } + } catch (Exception ex) { + handleError(resp, req.toString(), ex); + } + } + + private void handleError(HttpServletResponse resp, String request, Throwable th) throws IOException { + OseeLog.log(Activator.class, Level.SEVERE, String.format("Osee Cache request error: [%s]", request), th); + resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + resp.setContentType("text/plain"); + resp.getWriter().write(Lib.exceptionToString(th)); + resp.getWriter().flush(); + resp.getWriter().close(); + } + + private void storeUpdates(boolean isCompatible, HttpServletRequest req, HttpServletResponse resp) throws OseeCoreException { + IDataTranslationService service = getTranslationService(); + IOseeCachingService caching = getCachingService(); + TransactionCache txCache = caching.getTransactionCache(); + + BranchCacheStoreRequest updateRequest = null; + InputStream inputStream = null; + try { + inputStream = req.getInputStream(); + updateRequest = service.convert(inputStream, CoreTranslatorId.BRANCH_CACHE_STORE_REQUEST); + } catch (IOException ex) { + OseeExceptions.wrapAndThrow(ex); + } finally { + Lib.close(inputStream); + } + Collection<Branch> updated = + new BranchCacheUpdateUtil(factoryService.getBranchFactory(), txCache).updateCache(updateRequest, + caching.getBranchCache()); + + BranchCache cache = caching.getBranchCache(); + if (updateRequest.isServerUpdateMessage()) { + for (Branch branch : updated) { + if (StorageState.CREATED == branch.getStorageState()) { + branch.setStorageState(StorageState.MODIFIED); + } + branch.clearDirty(); + cache.decache(branch); + cache.cache(branch); + } + } else { + cache.storeItems(updated); + } + try { + resp.setStatus(HttpServletResponse.SC_ACCEPTED); + resp.setContentType("text/plain"); + resp.setCharacterEncoding("UTF-8"); + resp.getWriter().write("Branch Store Successful"); + } catch (IOException ex) { + OseeExceptions.wrapAndThrow(ex); + } + } + + private void sendUpdates(boolean isCompatible, HttpServletRequest req, HttpServletResponse resp) throws OseeCoreException { + IDataTranslationService service = getTranslationService(); + IOseeCachingService caching = getCachingService(); + + CacheUpdateRequest updateRequest = null; + InputStream inputStream = null; + try { + inputStream = req.getInputStream(); + updateRequest = service.convert(inputStream, CoreTranslatorId.OSEE_CACHE_UPDATE_REQUEST); + } catch (IOException ex) { + OseeExceptions.wrapAndThrow(ex); + } finally { + Lib.close(inputStream); + } + + OutputStream outputStream = null; + try { + Pair<Object, ITranslatorId> pair = createResponse(isCompatible, updateRequest, caching); + + resp.setStatus(HttpServletResponse.SC_ACCEPTED); + resp.setContentType("text/xml"); + resp.setCharacterEncoding("UTF-8"); + + ModCompatible.makeSendCompatible(isCompatible, pair.getFirst()); + + inputStream = service.convertToStream(pair.getFirst(), pair.getSecond()); + outputStream = resp.getOutputStream(); + Lib.inputStreamToOutputStream(inputStream, outputStream); + } catch (IOException ex) { + OseeExceptions.wrapAndThrow(ex); + } + } + + private Pair<Object, ITranslatorId> createResponse(boolean isCompatible, CacheUpdateRequest updateRequest, IOseeCachingService caching) throws OseeCoreException { + Conditions.checkNotNull(caching, "caching service"); + Object response = null; + ITranslatorId transalatorId = null; + switch (updateRequest.getCacheId()) { + case BRANCH_CACHE: + response = BranchCacheUpdateResponse.fromCache(caching.getBranchCache(), caching.getBranchCache().getAll()); + transalatorId = CoreTranslatorId.BRANCH_CACHE_UPDATE_RESPONSE; + break; + case TRANSACTION_CACHE: + Collection<TransactionRecord> record; + TransactionCache txCache = caching.getTransactionCache(); + + if (updateRequest.getItemsIds().isEmpty()) { + record = txCache.getAll(); + } else { + record = new ArrayList<TransactionRecord>(); + for (Integer item : updateRequest.getItemsIds()) { + record.add(txCache.getOrLoad(item)); + } + } + response = TransactionCacheUpdateResponse.fromCache(factoryService.getTransactionFactory(), record); + transalatorId = CoreTranslatorId.TX_CACHE_UPDATE_RESPONSE; + break; + case ARTIFACT_TYPE_CACHE: + response = ArtifactTypeCacheUpdateResponse.fromCache(caching.getArtifactTypeCache().getAll()); + transalatorId = CoreTranslatorId.ARTIFACT_TYPE_CACHE_UPDATE_RESPONSE; + break; + case ATTRIBUTE_TYPE_CACHE: + response = + AttributeTypeCacheUpdateResponse.fromCache(factoryService.getAttributeTypeFactory(), + caching.getAttributeTypeCache().getAll()); + transalatorId = CoreTranslatorId.ATTRIBUTE_TYPE_CACHE_UPDATE_RESPONSE; + break; + case OSEE_ENUM_TYPE_CACHE: + response = OseeEnumTypeCacheUpdateResponse.fromCache(caching.getEnumTypeCache().getAll()); + transalatorId = CoreTranslatorId.OSEE_ENUM_TYPE_CACHE_UPDATE_RESPONSE; + break; + case RELATION_TYPE_CACHE: + response = RelationTypeCacheUpdateResponse.fromCache(caching.getRelationTypeCache().getAll()); + transalatorId = CoreTranslatorId.RELATION_TYPE_CACHE_UPDATE_RESPONSE; + break; + default: + throw new OseeArgumentException(String.format("Invalid cacheId [%s]", updateRequest.getCacheId())); + } + return new Pair<Object, ITranslatorId>(response, transalatorId); + } } |