/** * Submits new harvesting task for partial harvest. * * @param context request context * @param resource resource to harvest * @param maxRecs maximum number of records to harvest (<code>null</code> for no maximum limit) * @param fromDate to harvest only from the specific date (<code>null</code> for no from date) * @return <code>true</code> if task has been submitted */ public boolean submit(RequestContext context, HrRecord resource, Integer maxRecs, Date fromDate) { if (resource == null) throw new IllegalArgumentException("No resource to harvest provided."); // create instance of the task // add only if no similar task currently executing boolean submitted = false; if (ApprovalStatus.isPubliclyVisible(resource.getApprovalStatus().name()) && resource.getSynchronizable()) { CommonCriteria criteria = new CommonCriteria(); criteria.setMaxRecords(maxRecs); if (fromDate != null) { Calendar cal = Calendar.getInstance(); cal.setTime(fromDate); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); fromDate = cal.getTime(); } criteria.setFromDate(fromDate); submitted = !isExecutingLocally(resource.getUuid()) && (taskQueue != null ? taskQueue.add(context, resource, criteria) : false); LOGGER.log( Level.FINER, "[SYNCHRONIZER] Submitted resource: {0} ({1})", new Object[] {resource.getUuid(), resource.getName()}); } return submitted; }
/** * Creates instance of editor. * * @param harvestRepository repository to be edited */ public HarvestEditor(HrRecord harvestRepository) { _harvestRepository = harvestRepository; protocols.put(harvestRepository.getProtocol().getKind(), harvestRepository.getProtocol()); ApplicationContext appCtx = ApplicationContext.getInstance(); ApplicationConfiguration appCfg = appCtx.getConfiguration(); String sArcgisDotComAllowed = appCfg .getCatalogConfiguration() .getParameters() .getValue("webharvester.agp2agp.arcgisDotCom.allowed"); this.arcgisDotComAllowed = Val.chkBool(sArcgisDotComAllowed, false); String sCrossAllowed = appCfg .getCatalogConfiguration() .getParameters() .getValue("webharvester.agp2agp.sameDomain.allowed"); this.crossAllowed = Val.chkBool(sCrossAllowed, false); }
/** * Spans new, separate thread exclusively for the resource. * * @param context request context * @param resource resource to harvest * @param maxRecs maximum number of records to harvest (<code>null</code> for no maximum limit) * @param fromDate to harvest only from the specific date (<code>null</code> for no from date) * @return <code>true</code> if task has been sumbited */ public boolean span(RequestContext context, HrRecord resource, Integer maxRecs, Date fromDate) { if (resource == null) throw new IllegalArgumentException("No resource to harvest provided."); // create instance of the task // add only if no similar task currently executing boolean submitted = false; if (resource.getApprovalStatus() == ApprovalStatus.approved && resource.getSynchronizable()) { CommonCriteria criteria = new CommonCriteria(); criteria.setMaxRecords(maxRecs); criteria.setFromDate(fromDate); submitted = pool != null && taskQueue != null ? !pool.isExecuting(resource.getUuid()) && taskQueue.register(context, resource, criteria) : false; if (submitted) pool.span(resource, criteria); LOGGER.log( Level.FINER, "[SYNCHRONIZER] Submitted resource: {0} ({1})", new Object[] {resource.getUuid(), resource.getName()}); } return submitted; }
/** * Gets host URL. * * @return host URL */ public String getHostUrl() { return _harvestRepository.getHostUrl(); }
/** * Gets repository name. * * @return name */ public String getName() { return _harvestRepository.getName(); }
/** * Sets repository name. * * @param name name */ public void setName(String name) { _harvestRepository.setName(name); }
/** * Sets time codes. * * @param timeCodes time codes */ public void setTimeCodes(String timeCodes) { _harvestRepository.getProtocol().setAdHoc(timeCodes); }
/** * Checks if 'deep harvest' is enabled. * * @return <code>true</code> if 'deep harvest' is enabled */ public boolean getUpdateContent() { return ProtocolInvoker.getUpdateContent(_harvestRepository.getProtocol()); }
/** * Sets SOAP URL. * * @param url SOAP URL */ public void setSoapUrl(String url) { if (_harvestRepository.getProtocol() instanceof ArcGISProtocol) { ((ArcGISProtocol) _harvestRepository.getProtocol()).setSoapUrl(url); } }
/** * Gets string representation of the object. * * @return string representation */ @Override public String toString() { return _harvestRepository.toString(); }
/** * Checks if 'lock-title' is enabled. If a flag is set, it means a title is locked and * synchronizer is not allowed to update it, although all the rest of information is allowed to be * updated. * * @return <code>true</code> if 'lock-title' is enabled */ public boolean getLockTitle() { return ProtocolInvoker.getLockTitle(_harvestRepository.getProtocol()); }
/** * Enables/disables 'lock-title' If a flag is set, it means a title is locked and synchronizer is * not allowed to update it, although all the rest of information is allowed to be updated. * * @param lockTitle <code>true</code> to enable 'lock-title' */ public void setLockTitle(boolean lockTitle) { ProtocolInvoker.setLockTitle(_harvestRepository.getProtocol(), lockTitle); }
/** * Checks if 'auto-approve' is enabled. * * @return <code>true</code> if 'auto-approve' is enabled */ public boolean getAutoApprove() { return ProtocolInvoker.getAutoApprove(_harvestRepository.getProtocol()); }
/** * Enables/disables 'auto-approve' * * @param enabled <code>true</code> to enable 'auto-approve' */ public void setAutoApprove(boolean enabled) { ProtocolInvoker.setAutoApprove(_harvestRepository.getProtocol(), enabled); }
/** * Enables/disables 'xml generation' * * @param enabled <code>true</code> to enable 'xml generation' */ public void setUpdateDefinition(boolean enabled) { ProtocolInvoker.setUpdateDefinition(_harvestRepository.getProtocol(), enabled); }
/** * Checks if 'xml generation' is enabled. * * @return <code>true</code> if 'xml generation' is enabled */ public boolean getUpdateDefinition() { return ProtocolInvoker.getUpdateDefinition(_harvestRepository.getProtocol()); }
/** * Enables/disables 'deep harvest' * * @param enabled <code>true</code> to enable 'deep harvest' */ public void setUpdateContent(boolean enabled) { ProtocolInvoker.setUpdateContent(_harvestRepository.getProtocol(), enabled); }
/** * Sets host URL. * * @param hostUrl host URL */ public void setHostUrl(String hostUrl) { _harvestRepository.setHostUrl(hostUrl); }
/** * Gets harvest frequency. * * @return harvest frequency */ public String getHarvestFrequency() { return _harvestRepository.getHarvestFrequency().name().toLowerCase(); }
/** * Gets SOAP URL. * * @return SOAP URL */ public String getSoapUrl() { return _harvestRepository.getProtocol() instanceof ArcGISProtocol ? ((ArcGISProtocol) _harvestRepository.getProtocol()).getSoapUrl() : ""; }
/** * Gets protocol name. * * @return protocol name */ public String getType() { return _harvestRepository.getProtocol().getKind().toLowerCase(); }
/** * Validates entered content. * * @param mb message broker * @return <code>true</code> if data is valid */ public boolean validate(MessageBroker mb) { _valid = true; if (getHostUrl().length() == 0) { mb.addErrorMessage("catalog.harvest.manage.edit.err.hostUrlReq"); _valid = false; } String kind = _harvestRepository.getProtocol().getKind(); if (kind.equalsIgnoreCase(ProtocolType.ArcIms.name())) { if (getArcIms().getPortNoAsString().length() == 0) { mb.addErrorMessage("catalog.harvest.manage.edit.err.portNumberReq"); _valid = false; } else { try { int portNo = Integer.parseInt(getArcIms().getPortNoAsString()); if (!(portNo >= 0 && portNo < 65536)) { mb.addErrorMessage("catalog.harvest.manage.edit.err.portNumberInv"); _valid = false; } } catch (NumberFormatException ex) { mb.addErrorMessage("catalog.harvest.manage.edit.err.portNumberInv"); _valid = false; } } if (getArcIms().getServiceName().length() == 0) { mb.addErrorMessage("catalog.harvest.manage.edit.err.serviceNameReq"); _valid = false; } } else if (kind.equalsIgnoreCase(ProtocolType.OAI.name())) { if (getOai().getPrefix().length() == 0) { mb.addErrorMessage("catalog.harvest.manage.edit.err.prefixReq"); _valid = false; } } else if (kind.equalsIgnoreCase("arcgis")) { ArcGISProtocol p = (ArcGISProtocol) protocols.get("arcgis"); if (p.getSoapUrl().length() == 0) { mb.addErrorMessage("catalog.harvest.manage.edit.err.soapUrl"); _valid = false; } } else if (kind.equalsIgnoreCase("agp2agp")) { HarvestProtocolAgp2Agp p = (HarvestProtocolAgp2Agp) protocols.get("agp2agp"); if (p != null) { if (!getArcgisDotComAllowed()) { if (p.getDestinationHost().toLowerCase().endsWith("arcgis.com") || p.getDestinationHost().toLowerCase().endsWith("arcgisonline.com")) { mb.addErrorMessage("catalog.harvest.manage.test.msg.agp2agp.arcgis.forbiden"); _valid = false; } } else if (!getCrossAllowed()) { String srcHost[] = p.getSourceHost().split("[.]"); String dstHost[] = p.getDestinationHost().split("[.]"); if (srcHost != null && srcHost.length >= 2 && dstHost != null && dstHost.length >= 2) { if (srcHost[srcHost.length - 1].equalsIgnoreCase(dstHost[dstHost.length - 1]) && srcHost[srcHost.length - 2].equalsIgnoreCase(dstHost[dstHost.length - 2])) { mb.addErrorMessage("catalog.harvest.manage.test.msg.agp2agp.cross.forbiden"); _valid = false; } } } if (_valid) { if (!p.getSourceHost().matches(HOST_NAME_REGEX)) { mb.addErrorMessage("catalog.harvest.manage.edit.src.h.err"); _valid = false; } if (p.getAttributeMap().getValue("src-q").isEmpty()) { mb.addErrorMessage("catalog.harvest.manage.edit.src.q.err"); _valid = false; } if (p.getAttributeMap().getValue("src-m").isEmpty()) { mb.addErrorMessage("catalog.harvest.manage.edit.src.m.err"); _valid = false; } else if (Val.chkLong(p.getAttributeMap().getValue("src-m"), 0) <= 0 || Val.chkLong(p.getAttributeMap().getValue("src-m"), 0) > HarvestProtocolAgp2Agp.getAgp2AgpMaxItems()) { mb.addErrorMessage( "catalog.harvest.manage.edit.src.m.err.less", new Object[] {HarvestProtocolAgp2Agp.getAgp2AgpMaxItems()}); _valid = false; } if (p.getAttributeMap().getValue("src-u").isEmpty()) { mb.addErrorMessage("catalog.harvest.manage.edit.src.u.err"); _valid = false; } if (p.getAttributeMap().getValue("src-p").isEmpty()) { mb.addErrorMessage("catalog.harvest.manage.edit.src.p.err"); _valid = false; } if (!p.getDestinationHost().matches(HOST_NAME_REGEX)) { mb.addErrorMessage("catalog.harvest.manage.edit.dest.h.err"); _valid = false; } if (p.getAttributeMap().getValue("dest-o").isEmpty()) { mb.addErrorMessage("catalog.harvest.manage.edit.dest.o.err"); _valid = false; } if (p.getAttributeMap().getValue("dest-u").isEmpty()) { mb.addErrorMessage("catalog.harvest.manage.edit.dest.u.err"); _valid = false; } if (p.getAttributeMap().getValue("dest-p").isEmpty()) { mb.addErrorMessage("catalog.harvest.manage.edit.dest.p.err"); _valid = false; } if (p.getAttributeMap().getValue("dest-f").isEmpty()) { mb.addErrorMessage("catalog.harvest.manage.edit.dest.f.err"); _valid = false; } } } } return _valid; }
/** * Sets owner id from string. * * @param value owner id */ public void setOwnerId(String value) { _harvestRepository.setOwnerId(Val.chkInt(value, -1)); }
/** * Gets time codes. * * @return time codes. */ public String getTimeCodes() { return _harvestRepository.getProtocol().getAdHoc(); }
/** * Sets sending notification switch flag. * * @param sendNotification sending notification switch flag */ public void setSendNotification(String sendNotification) { _harvestRepository.setSendNotification(Val.chkBool(sendNotification, false)); }
/** * Sets harvest frequency. * * @param harvestFrequency harvest frequency */ public void setHarvestFrequency(String harvestFrequency) { _harvestRepository.setHarvestFrequency( HrRecord.HarvestFrequency.checkValueOf(harvestFrequency)); }
/** * Sets protocol name. * * @param name protocol name name */ public void setType(String name) { _harvestRepository.setProtocol(protocols.get(name)); }
/** * Gets sending notification switch flag. * * @return sending notification switch flag */ public String getSendNotification() { return Boolean.toString(_harvestRepository.getSendNotification()); }
/** * Gets owner id as string. * * @return owner id */ public String getOwnerId() { return Integer.toString(_harvestRepository.getOwnerId()); }