private void doExecuteWorkflow(VitroRequest vreq) { String workflowURI = vreq.getParameter("workflowURI"); String workflowStepURI = vreq.getParameter("workflowStepURI"); OntModel jenaOntModel = (OntModel) getModel("vitro:jenaOntModel", vreq); new JenaIngestWorkflowProcessor(jenaOntModel.getIndividual(workflowURI), getModelMaker(vreq)) .run(jenaOntModel.getIndividual(workflowStepURI)); }
private void processCreateModelRequest( VitroRequest vreq, ModelMaker maker, WhichService modelType) { String modelName = vreq.getParameter("modelName"); if (modelName != null) { try { URI graphURI = new URI(modelName); if (graphURI.getScheme() == null) { String origName = modelName; modelName = CREATED_GRAPH_BASE_URI + modelName; log.info("The model name has been changed from " + origName + " to " + modelName); } doCreateModel(modelName, maker); showModelList(vreq, maker, modelType); } catch (URISyntaxException e) { throw new RuntimeException("the model name must be a valid URI"); } } else { vreq.setAttribute("modelType", modelType.toString()); vreq.setAttribute("title", "Create New Model"); vreq.setAttribute("bodyJsp", CREATE_MODEL_JSP); } }
private void processRenameBNodesURISelectRequest(VitroRequest vreq, ModelMaker maker) { String namespaceEtcStr = vreq.getParameter("namespaceEtcStr"); String pattern = vreq.getParameter("pattern"); String concatenate = vreq.getParameter("concatenate"); String[] sourceModel = vreq.getParameterValues("sourceModelName"); if (namespaceEtcStr != null) { if (namespaceEtcStr.isEmpty()) { if ("true".equals(vreq.getParameter("csv2rdf"))) { processCsv2rdfRequest(vreq); return; } else { vreq.setAttribute("errorMsg", "Please enter a value."); processRenameBNodesRequest(vreq, maker); return; } } if (concatenate.equals("integer")) { doRenameBNodes(vreq, namespaceEtcStr, false, null, sourceModel); } else { pattern = pattern.trim(); doRenameBNodes(vreq, namespaceEtcStr, true, pattern, sourceModel); } vreq.setAttribute("title", "Ingest Menu"); vreq.setAttribute("bodyJsp", INGEST_MENU_JSP); } else { vreq.setAttribute("title", "URI Select"); vreq.setAttribute("bodyJsp", RENAME_BNODES_URI_SELECT_JSP); } }
private void processCleanLiteralsRequest(VitroRequest vreq) { String modelNameStr = vreq.getParameter("modelName"); Model model = getModel(modelNameStr, vreq); doCleanLiterals(model); vreq.setAttribute("title", "Ingest Menu"); vreq.setAttribute("bodyJsp", INGEST_MENU_JSP); }
public AbstractAjaxResponder(HttpServlet servlet, VitroRequest vreq, HttpServletResponse resp) { this.servlet = servlet; this.vreq = vreq; this.resp = resp; this.indDao = vreq.getWebappDaoFactory().getIndividualDao(); this.uaDao = vreq.getWebappDaoFactory().getUserAccountsDao(); }
private void processOutputModelRequest(VitroRequest vreq, HttpServletResponse response) { String modelNameStr = vreq.getParameter("modelName"); Model model = getModel(modelNameStr, vreq); JenaOutputUtils.setNameSpacePrefixes(model, vreq.getWebappDaoFactory()); model.enterCriticalSection(Lock.READ); try { OutputStream out = response.getOutputStream(); response.setContentType("application/x-turtle"); // out.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".getBytes()); model.write(out, "TTL"); out.flush(); out.close(); } catch (com.hp.hpl.jena.shared.CannotEncodeCharacterException cece) { // there's got to be a better way to do this byte[] badCharBytes = String.valueOf(cece.getBadChar()).getBytes(); String errorMsg = "Cannot encode character with byte values: (decimal) "; for (int i = 0; i < badCharBytes.length; i++) { errorMsg += badCharBytes[i]; } throw new RuntimeException(errorMsg, cece); } catch (Exception e) { log.error(e, e); } finally { model.leaveCriticalSection(); } }
// Prepare for update or non-update // Originally included in edit request dispatch controller but moved here due to // exceptions such as default add missing individual form void prepare(VitroRequest vreq, EditConfigurationVTwo editConfig) { // setup the model selectors for query, write and display models on editConfig setupModelSelectorsFromVitroRequest(vreq, editConfig); OntModel queryModel = vreq.getJenaOntModel(); // (OntModel)vreq.getAttribute("jenaOntModel"); if (editConfig.getSubjectUri() == null) editConfig.setSubjectUri(EditConfigurationUtils.getSubjectUri(vreq)); if (editConfig.getPredicateUri() == null) editConfig.setPredicateUri(EditConfigurationUtils.getPredicateUri(vreq)); String objectUri = EditConfigurationUtils.getObjectUri(vreq); Integer dataKey = EditConfigurationUtils.getDataHash(vreq); if (objectUri != null && !objectUri.trim().isEmpty()) { // editing existing object if (editConfig.getObject() == null) editConfig.setObject(EditConfigurationUtils.getObjectUri(vreq)); editConfig.prepareForObjPropUpdate(queryModel); } else if (dataKey != null) { // edit of a data prop statement // do nothing since the data prop form generator must take care of it editConfig.prepareForDataPropUpdate( queryModel, vreq.getWebappDaoFactory().getDataPropertyDao()); } else { // this might be a create new or a form editConfig.prepareForNonUpdate(queryModel); } }
/** * We are just starting the upload process. Record where we came from, so if they hit "cancel" we * know where to send them. If we have problems, just clear it. */ private void captureReferringUrl(VitroRequest vreq) { String referrer = vreq.getHeader("Referer"); if (referrer == null) { vreq.getSession().removeAttribute(ATTRIBUTE_REFERRING_PAGE); } else { vreq.getSession().setAttribute(ATTRIBUTE_REFERRING_PAGE, referrer); } }
@Override protected ResponseValues processRequest(VitroRequest vreq) { // get the EditConfiguration EditConfigurationVTwo configuration = EditConfigurationUtils.getEditConfiguration(vreq); if (configuration == null) throw new Error("No edit configuration found."); // get the EditSubmission MultiValueEditSubmission submission = new MultiValueEditSubmission(vreq.getParameterMap(), configuration); EditSubmissionUtils.putEditSubmissionInSession(vreq.getSession(), submission); // if errors, return error response ResponseValues errorResponse = doValidationErrors(vreq, configuration, submission); if (errorResponse != null) return errorResponse; // get the models to work with in case the write model and query model are not the defaults OntModel queryModel = configuration.getQueryModelSelector().getModel(vreq, getServletContext()); OntModel writeModel = configuration.getWriteModelSelector().getModel(vreq, getServletContext()); // If data property check for back button confusion boolean isBackButton = checkForBackButtonConfusion(configuration, vreq, queryModel); if (isBackButton) { // Process back button issues and do a return here return doProcessBackButton(configuration, submission, vreq); } // Otherwise, process as usual AdditionsAndRetractions changes; try { ProcessRdfForm prf = new ProcessRdfForm(configuration, new NewURIMakerVitro(vreq.getWebappDaoFactory())); changes = prf.process(configuration, submission); } catch (Exception e) { throw new Error(e); } if (configuration.isUseDependentResourceDelete()) changes = ProcessRdfForm.addDependentDeletes(changes, queryModel); N3EditUtils.preprocessModels(changes, configuration, vreq); ProcessRdfForm.applyChangesToWriteModel( changes, queryModel, writeModel, EditN3Utils.getEditorUri(vreq)); // Here we are trying to get the entity to return to URL, // More involved processing for data property apparently String entityToReturnTo = N3EditUtils.processEntityToReturnTo(configuration, submission, vreq); // For data property processing, need to update edit configuration for back button N3EditUtils.updateEditConfigurationForBackButton(configuration, submission, vreq, writeModel); PostEditCleanupController.doPostEditCleanup(vreq); return PostEditCleanupController.doPostEditRedirect(vreq, entityToReturnTo); }
private long doExecuteSparql(VitroRequest vreq) { OntModel jenaOntModel = ModelAccess.on(getServletContext()).getOntModel(); OntModel source = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM); String[] sourceModel = vreq.getParameterValues("sourceModelName"); for (int i = 0; i < sourceModel.length; i++) { Model m = getModel(sourceModel[i], vreq); source.addSubModel(m); } Model destination = getModel(vreq.getParameter("destinationModelName"), vreq); String sparqlQueryStr = vreq.getParameter("sparqlQueryStr"); String savedQueryURIStr = vreq.getParameter("savedQuery"); String queryStr; if (savedQueryURIStr.length() == 0) { log.debug("Using entered query"); queryStr = sparqlQueryStr; } else { Property queryStrProp = ResourceFactory.createProperty(SPARQL_QUERYSTR_PROP); jenaOntModel.enterCriticalSection(Lock.READ); try { Individual ind = jenaOntModel.getIndividual(savedQueryURIStr); log.debug("Using query " + savedQueryURIStr); queryStr = ((Literal) ind.getPropertyValue(queryStrProp)).getLexicalForm(); queryStr = StringEscapeUtils.unescapeHtml( queryStr); // !!! We need to turn off automatic HTML-escaping for data property // editing. } finally { jenaOntModel.leaveCriticalSection(); } } Model tempModel = ModelFactory.createDefaultModel(); Query query = SparqlQueryUtils.create(queryStr); QueryExecution qexec = QueryExecutionFactory.create(query, source); try { qexec.execConstruct(tempModel); } catch (QueryExecException qee) { qexec.execDescribe(tempModel); } destination.enterCriticalSection(Lock.WRITE); try { if (destination instanceof OntModel) { ((OntModel) destination).getBaseModel().notifyEvent(new EditEvent(null, true)); } else { destination.notifyEvent(new EditEvent(null, true)); } destination.add(tempModel); } finally { if (destination instanceof OntModel) { ((OntModel) destination).getBaseModel().notifyEvent(new EditEvent(null, false)); } else { destination.notifyEvent(new EditEvent(null, false)); } destination.leaveCriticalSection(); } return tempModel.size(); }
public void doSubtractModels(VitroRequest vreq) { String modela = vreq.getParameter("modela"); String modelb = vreq.getParameter("modelb"); String destination = vreq.getParameter("destinationModelName"); Model ma = getModel(modela, vreq); Model mb = getModel(modelb, vreq); Model destinationModel = getModel(destination, vreq); if (!destination.equals(modela)) destinationModel.add(ma.difference(mb)); else ma.remove(mb); }
private void processExecuteWorkflowRequest(VitroRequest vreq) { String workflowURIStr = vreq.getParameter("workflowURI"); String workflowStepURIStr = vreq.getParameter("workflowStepURI"); if (workflowURIStr != null && workflowStepURIStr != null) { doExecuteWorkflow(vreq); vreq.setAttribute("title", "IngestMenu"); vreq.setAttribute("bodyJsp", INGEST_MENU_JSP); } else if (workflowURIStr != null) { // Select the workflow step at which to start OntModel jenaOntModel = (OntModel) getModel("vitro:jenaOntModel", vreq); vreq.setAttribute( "workflowSteps", new JenaIngestWorkflowProcessor( jenaOntModel.getIndividual(workflowURIStr), getModelMaker(vreq)) .getWorkflowSteps(null)); vreq.setAttribute("title", "Choose Workflow Step"); vreq.setAttribute("bodyJsp", WORKFLOW_STEP_JSP); } else { OntModel jenaOntModel = ModelAccess.on(getServletContext()).getOntModel(); jenaOntModel.enterCriticalSection(Lock.READ); List<Individual> savedQueryList = new LinkedList<Individual>(); try { Resource workflowClassRes = WorkflowOntology.Workflow; savedQueryList.addAll(jenaOntModel.listIndividuals(workflowClassRes).toList()); } finally { jenaOntModel.leaveCriticalSection(); } vreq.setAttribute("workflows", savedQueryList); vreq.setAttribute("title", "Execute Workflow"); vreq.setAttribute("bodyJsp", EXECUTE_WORKFLOW_JSP); } }
protected void setRequestAttributes(HttpServletRequest request, EditProcessObject epo) { VitroRequest vreq = new VitroRequest(request); request.setAttribute("epoKey", epo.getKey()); request.setAttribute("epo", epo); request.setAttribute("globalErrorMsg", epo.getAttribute("globalErrorMsg")); request.setAttribute( "css", "<link rel=\"stylesheet\" type=\"text/css\" href=\"" + vreq.getAppBean().getThemeDir() + "css/edit.css\"/>"); }
@Override protected void doRequest(VitroRequest vreq, HttpServletResponse response) { String errorMsg = null; String rankPredicate = vreq.getParameter(RANK_PREDICATE_PARAMETER_NAME); if (rankPredicate == null) { errorMsg = "No rank parameter specified"; log.error(errorMsg); doError(response, errorMsg, HttpServletResponse.SC_BAD_REQUEST); return; } String[] individualUris = vreq.getParameterValues(INDIVIDUAL_PREDICATE_PARAMETER_NAME); if (individualUris == null || individualUris.length == 0) { errorMsg = "No individuals specified"; log.error(errorMsg); doError(response, errorMsg, HttpServletResponse.SC_BAD_REQUEST); return; } WebappDaoFactory wadf = vreq.getWebappDaoFactory(); if (vreq.getWebappDaoFactory() == null) { errorMsg = "No WebappDaoFactory available"; log.error(errorMsg); doError(response, errorMsg, HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } DataPropertyStatementDao dpsDao = wadf.getDataPropertyStatementDao(); if (dpsDao == null) { errorMsg = "No DataPropertyStatementDao available"; log.error(errorMsg); doError(response, errorMsg, HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } // check permissions // TODO: (bdc34)This is not yet implemented, must check the IDs against the policies for // permissons before doing an edit! // rjy7 This should be inherited from the superclass boolean hasPermission = true; if (!hasPermission) { // if not okay, send error message doError(response, "Insufficent permissions", HttpStatus.SC_UNAUTHORIZED); return; } // This may not be the most efficient way. Should we instead build up a Model of retractions and // additions, so // we only hit the database once? reorderIndividuals(individualUris, vreq, rankPredicate); response.setStatus(HttpServletResponse.SC_OK); }
private void processGenerateTBoxRequest(VitroRequest vreq) { String testParam = vreq.getParameter("sourceModelName"); if (testParam != null) { doGenerateTBox(vreq); vreq.setAttribute("title", "Ingest Menu"); vreq.setAttribute("bodyJsp", INGEST_MENU_JSP); } else { vreq.setAttribute("title", "Generate TBox from Assertions Data"); vreq.setAttribute("bodyJsp", GENERATE_TBOX_JSP); } }
public void doGenerateTBox(VitroRequest vreq) { OntModel source = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM); String[] sourceModel = vreq.getParameterValues("sourceModelName"); for (int i = 0; i < sourceModel.length; i++) { Model m = getModel(sourceModel[i], vreq); source.addSubModel(m); } String destinationModelStr = vreq.getParameter("destinationModelName"); Model destination = getModel(destinationModelStr, vreq); destination.add((new JenaIngestUtils()).generateTBox(source)); }
private void processSubtractModelRequest(VitroRequest vreq) { String modela = vreq.getParameter("modela"); if (modela != null) { doSubtractModels(vreq); vreq.setAttribute("title", "IngestMenu"); vreq.setAttribute("bodyJsp", INGEST_MENU_JSP); } else { vreq.setAttribute("title", "Subtract Models"); vreq.setAttribute("bodyJsp", SUBTRACT_MODELS_JSP); } }
private void processProcessStringsRequest(VitroRequest vreq) { String className = vreq.getParameter("className"); if (className != null) { doProcessStrings(vreq); vreq.setAttribute("title", "IngestMenu"); vreq.setAttribute("bodyJsp", INGEST_MENU_JSP); } else { vreq.setAttribute("title", "Process Strings"); vreq.setAttribute("bodyJsp", PROCESS_STRINGS_JSP); } }
private void processSplitPropertyValuesRequest(VitroRequest vreq) { String splitRegex = vreq.getParameter("splitRegex"); if (splitRegex != null) { doSplitPropertyValues(vreq); vreq.setAttribute("title", "IngestMenu"); vreq.setAttribute("bodyJsp", INGEST_MENU_JSP); } else { vreq.setAttribute("title", "Split PropertyValues"); vreq.setAttribute("bodyJsp", SPLIT_PROPERTY_VALUES_JSP); } }
private void processCsv2rdfRequest(VitroRequest vreq) { String csvUrl = vreq.getParameter("csvUrl"); if (csvUrl != null) { /*doExecuteCsv2Rdf(vreq);*/ vreq.setAttribute("title", "IngestMenu"); vreq.setAttribute("bodyJsp", INGEST_MENU_JSP); } else { vreq.setAttribute("title", "Convert CSV to RDF"); vreq.setAttribute("bodyJsp", CSV2RDF_JSP); } }
private void processSmushSingleModelRequest(VitroRequest vreq) { String propertyURIStr = vreq.getParameter("propertyURI"); if (propertyURIStr != null) { doSmushSingleModel(vreq); vreq.setAttribute("title", "Ingest Menu"); vreq.setAttribute("bodyJsp", INGEST_MENU_JSP); } else { vreq.setAttribute("title", "Smush Resources"); vreq.setAttribute("bodyJsp", SMUSH_JSP); } }
@Override public Map<String, String> generateDataVisualization( VitroRequest vitroRequest, Log log, Dataset dataset) throws MalformedQueryParametersException { String egoURI = vitroRequest.getParameter(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY); String visMode = vitroRequest.getParameter(VisualizationFrameworkConstants.VIS_MODE_KEY); ModelConstructor constructQueryRunner = new CoPIGrantCountConstructQueryRunner(egoURI, dataset, log); Model constructedModel = constructQueryRunner.getConstructedModel(); QueryRunner<CollaborationData> queryManager = new CoPIGrantCountQueryRunner(egoURI, constructedModel, log); CollaborationData investigatorNodesAndEdges = queryManager.getQueryResult(); /* * We will be using the same visualization package for both sparkline & co-pi * flash vis. We will use "VIS_MODE_KEY" as a modifier to differentiate * between these two. The default will be to render the co-pi network vis. * */ if (VisualizationFrameworkConstants.COPIS_COUNT_PER_YEAR_VIS_MODE.equalsIgnoreCase(visMode)) { /* * When the csv file is required - based on which sparkline visualization will * be rendered. * */ return prepareCoPIsCountPerYearDataResponse(investigatorNodesAndEdges); } else if (VisualizationFrameworkConstants.COPIS_LIST_VIS_MODE.equalsIgnoreCase(visMode)) { /* * When the csv file is required - based on which sparkline visualization will * be rendered. * */ return prepareCoPIsListDataResponse(investigatorNodesAndEdges); } else if (VisualizationFrameworkConstants.COPI_NETWORK_DOWNLOAD_VIS_MODE.equalsIgnoreCase( visMode)) { /* * When the csv file is required - based on which sparkline visualization will * be rendered. * */ return prepareNetworkDownloadDataResponse(investigatorNodesAndEdges); } else { /* * When the graphML file is required - based on which co-pi network * visualization will be rendered. * */ return prepareNetworkStreamDataResponse(investigatorNodesAndEdges); } }
private void processRenameResourceRequest(VitroRequest vreq) { String oldNamespace = vreq.getParameter("oldNamespace"); String newNamespace = vreq.getParameter("newNamespace"); String errorMsg = ""; if (oldNamespace != null) { if (oldNamespace.isEmpty() && !newNamespace.isEmpty()) { errorMsg = "Please enter the old namespace to be changed."; } else if (!oldNamespace.isEmpty() && newNamespace.isEmpty()) { errorMsg = "Please enter the new namespace."; } else if (oldNamespace.isEmpty() && newNamespace.isEmpty()) { errorMsg = "Please enter the namespaces."; } else if (oldNamespace.equals(newNamespace)) { errorMsg = "Please enter two different namespaces."; } if (!errorMsg.isEmpty()) { vreq.setAttribute("errorMsg", errorMsg); vreq.setAttribute("oldNamespace", oldNamespace); vreq.setAttribute("newNamespace", newNamespace); vreq.setAttribute("title", "Rename Resource"); vreq.setAttribute("bodyJsp", RENAME_RESOURCE); } else { String result = doRename(oldNamespace, newNamespace); vreq.setAttribute("result", result); vreq.setAttribute("title", "Rename Resources"); vreq.setAttribute("bodyJsp", RENAME_RESULT); } } else { vreq.setAttribute("title", "Rename Resource"); vreq.setAttribute("bodyJsp", RENAME_RESOURCE); } }
/** We need to be talking about an actual Individual here. */ private Individual validateEntityUri(VitroRequest vreq) throws UserMistakeException { String entityUri = vreq.getParameter(PARAMETER_ENTITY_URI); if (entityUri == null) { throw new UserMistakeException("No entity URI was provided"); } Individual entity = vreq.getFullWebappDaoFactory().getIndividualDao().getIndividualByURI(entityUri); if (entity == null) { throw new UserMistakeException( "This URI is not recognized as belonging to anyone: '" + entityUri + "'"); } return entity; }
/** Get the model type from the request, or from the session. */ protected WhichService getModelType(VitroRequest vreq) { String modelType = vreq.getParameter("modelType"); if (modelType != null) { if (modelType.equals(CONFIGURATION.toString())) { return CONFIGURATION; } else { return CONTENT; } } if (vreq.getSession().getAttribute(WHICH_MODEL_MAKER) == CONFIGURATION) { return CONFIGURATION; } else { return CONTENT; } }
/** * Handle the different actions. If not specified, the default action is to show the intro screen. */ private ResponseValues buildTheResponse(VitroRequest vreq) { String action = vreq.getParameter(PARAMETER_ACTION); try { Individual entity = validateEntityUri(vreq); if (ACTION_UPLOAD.equals(action)) { return doUploadImage(vreq, entity); } else if (ACTION_SAVE.equals(action)) { return doCreateThumbnail(vreq, entity); } else if (ACTION_DELETE.equals(action)) { captureReferringUrl(vreq); return doDeleteImage(vreq, entity); } else if (ACTION_DELETE_EDIT.equals(action)) { return doDeleteThenEdit(vreq, entity); } else { captureReferringUrl(vreq); return doIntroScreen(vreq, entity); } } catch (UserMistakeException e) { // Can't find the entity? Complain. return showAddImagePageWithError(vreq, null, e.getMessage()); } catch (Exception e) { // We weren't expecting this - log it, and apologize to the user. return new ExceptionResponseValues(e); } }
public List<Option> getSortedList( HashMap<String, Option> hashMap, List<Option> optionList, VitroRequest vreq) { class ListComparator implements Comparator<String> { Collator collator; public ListComparator(Collator collator) { this.collator = collator; } @Override public int compare(String str1, String str2) { return collator.compare(str1, str2); } } List<String> bodyVal = new ArrayList<String>(); List<Option> options = new ArrayList<Option>(); Iterator<Option> itr = optionList.iterator(); while (itr.hasNext()) { Option option = itr.next(); hashMap.put(option.getBody(), option); bodyVal.add(option.getBody()); } Collections.sort(bodyVal, new ListComparator(vreq.getCollator())); ListIterator<String> itrStr = bodyVal.listIterator(); while (itrStr.hasNext()) { options.add(hashMap.get(itrStr.next())); } return options; }
@Override protected void doRequest(VitroRequest vreq, HttpServletResponse resp) throws ServletException, IOException { DeveloperSettings settings = DeveloperSettings.getBean(vreq); /* * Are they allowed to control the panel? */ if (isAuthorized(vreq)) { // Update the settings. settings.updateFromRequest(vreq.getParameterMap()); } else { log.debug("Not authorized to update settings."); } /* * Build the response. */ try { Map<String, Object> bodyMap = buildBodyMap(isAuthorized(vreq), settings); String rendered = renderTemplate(vreq, bodyMap); resp.getWriter().write(rendered); } catch (Exception e) { doError(resp, e.toString(), 500); } }
private void processDetachModelRequest( VitroRequest vreq, ModelMaker maker, WhichService modelType) { String modelName = vreq.getParameter("modelName"); if (modelName != null) { doDetachModel(modelName); } showModelList(vreq, maker, modelType); }
/** Delete the main image and the thumbnail, and go to the "add image" screen. */ private ResponseValues doDeleteThenEdit(VitroRequest vreq, Individual entity) { ImageUploadHelper helper = new ImageUploadHelper(fileStorage, vreq.getFullWebappDaoFactory(), getServletContext()); helper.removeExistingImage(entity); return showAddImagePage(vreq, entity); }