Package com.esri.gpt.control.harvest

Source Code of com.esri.gpt.control.harvest.HarvestEditor

/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.esri.gpt.control.harvest;

import com.esri.gpt.catalog.harvest.protocols.HarvestProtocol.ProtocolType;
import com.esri.gpt.catalog.harvest.protocols.HarvestProtocolAgp2Agp;
import com.esri.gpt.catalog.harvest.protocols.HarvestProtocolResource;
import com.esri.gpt.catalog.harvest.protocols.HarvestProtocolArcIms;
import com.esri.gpt.catalog.harvest.protocols.HarvestProtocolCsw;
import com.esri.gpt.catalog.harvest.protocols.HarvestProtocolOai;
import com.esri.gpt.catalog.harvest.protocols.HarvestProtocolWaf;
import com.esri.gpt.catalog.harvest.repository.HrRecord;
import com.esri.gpt.catalog.management.MmdEnums.ApprovalStatus;
import com.esri.gpt.control.webharvest.client.arcgis.ArcGISProtocol;
import com.esri.gpt.control.webharvest.protocol.Protocol;
import com.esri.gpt.control.webharvest.protocol.ProtocolFactory;
import com.esri.gpt.control.webharvest.protocol.ProtocolInvoker;
import com.esri.gpt.control.webharvest.validator.IValidator;
import com.esri.gpt.control.webharvest.validator.MessageCollectorAdaptor;
import com.esri.gpt.control.webharvest.validator.ValidatorFactory;
import com.esri.gpt.framework.collection.StringAttributeMap;
import com.esri.gpt.framework.context.ApplicationConfiguration;
import com.esri.gpt.framework.context.ApplicationContext;
import com.esri.gpt.framework.jsf.FacesMap;
import com.esri.gpt.framework.jsf.MessageBroker;
import com.esri.gpt.framework.util.Val;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
import javax.faces.model.SelectItem;

/**
* Provides harvest repository editing functionality.
* It assures that each harvest repository can be viewed in the same, unified
* way regardless the protocol. It also provides smooth values translation
* from/to native form as stored within the object and to/from string value as
* required in most cases to display on the form.
*/
public class HarvestEditor {

// class variables =============================================================
/** CSW profiles manager */
private static CswProfilesManager _cswProfilesManager = new CswProfilesManager();
private static final String HOST_NAME_REGEX = "(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])([/].+)?$)|(^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])([/].+)?$)";

// instance variables ==========================================================
 
/** validation status */ 
private boolean _valid;
 
/** Edited repository. */
private HrRecord _harvestRepository;

/** all possible protocols */
private TreeMap<String,Protocol> protocols = new TreeMap<String,Protocol>(String.CASE_INSENSITIVE_ORDER);
{
  ApplicationContext appCtx = ApplicationContext.getInstance();
  ApplicationConfiguration appCfg = appCtx.getConfiguration();
  for (Map.Entry<String,ProtocolFactory> e : appCfg.getProtocolFactories().entrySet()) {
    protocols.put(e.getKey(), e.getValue().newProtocol());
  }
}

private boolean arcgisDotComAllowed;
private boolean crossAllowed;

private FrequencyMode frequencyMode = FrequencyMode.PERIODICAL;

// constructors ================================================================
/**
* 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);
}

// properties ==================================================================
@Deprecated
public boolean getArcgisDotComAllowed() {
  return arcgisDotComAllowed;
}

@Deprecated
public void setArcgisDotComAllowed(boolean arcgisDotComAllowed) {
  this.arcgisDotComAllowed = arcgisDotComAllowed;
}

@Deprecated
public boolean getCrossAllowed() {
  return crossAllowed;
}

@Deprecated
public void setCrossAllowed(boolean crossAllowed) {
  this.crossAllowed = crossAllowed;
}

/**
* Gets edited repository.
* @return edited repository
*/
public HrRecord getRepository() {
  return _harvestRepository;
}

/**
* Gets owner id as string.
* @return owner id
*/
public String getOwnerId() {
  return Integer.toString(_harvestRepository.getOwnerId());
}

/**
* Sets owner id from string.
* @param value owner id
*/
public void setOwnerId(String value) {
  _harvestRepository.setOwnerId(Val.chkInt(value, -1));
}

/**
* Gets map of attributes.
* @return map of attributes
*/
public Map<String,String> getAttrs() {
  return new FacesMap<String>() {

      @Override
      public String get(Object key) {
        StringAttributeMap map = _harvestRepository.getProtocol().getAttributeMap();
        String value = map.getValue(key.toString());
        if ("src-m".equals(key) && Val.chkStr(value).isEmpty()) {
          value = HarvestProtocolAgp2Agp.getAgp2AgpMaxItems().toString();
        }
        return Val.chkStr(value);
      }

      @Override
      public String put(String key, String value) {
        StringAttributeMap map = _harvestRepository.getProtocol().getAttributeMap();
        map.set(key.toString(), Val.chkStr(value));
        _harvestRepository.getProtocol().setAttributeMap(map);
        return value;
      }

  };
}

/**
* Gets protocol name.
* @return protocol name
*/
public String getType() {
  return _harvestRepository.getProtocol().getKind().toLowerCase();
}

/**
* Sets protocol name.
* @param name protocol name name
*/
public void setType(String name) {
  _harvestRepository.setProtocol(protocols.get(name));
}

/**
* Checks if 'deep harvest' is enabled.
* @return <code>true</code> if 'deep harvest' is enabled
*/
public boolean getUpdateContent() {
  return ProtocolInvoker.getUpdateContent(_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);
}

/**
* 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 'xml generation'
* @param enabled <code>true</code> to enable 'xml generation'
*/
public void setUpdateDefinition(boolean enabled) {
  ProtocolInvoker.setUpdateDefinition(_harvestRepository.getProtocol(), enabled);
}

/**
* 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);
}

/**
* 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);
}

/**
* Gets harvest frequency.
* @return harvest frequency
*/
public String getHarvestFrequency() {
  return _harvestRepository.getHarvestFrequency().name().toLowerCase();
}

/**
* Sets harvest frequency.
* @param harvestFrequency harvest frequency
*/
public void setHarvestFrequency(String harvestFrequency) {
  _harvestRepository.setHarvestFrequency(
     HrRecord.HarvestFrequency.checkValueOf(harvestFrequency));
}

/**
* Gets sending notification switch flag.
* @return sending notification switch flag
*/
public String getSendNotification() {
  return Boolean.toString(_harvestRepository.getSendNotification());
}

/**
* Sets sending notification switch flag.
* @param sendNotification sending notification switch flag
*/
public void setSendNotification(String sendNotification) {
  _harvestRepository.setSendNotification(Val.chkBool(sendNotification, false));
}

/**
* 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);
}

/**
* Gets host URL.
* @return host URL
*/
public String getHostUrl() {
  return _harvestRepository.getHostUrl();
}

/**
* Sets host URL.
* @param hostUrl host URL
*/
public void setHostUrl(String hostUrl) {
  _harvestRepository.setHostUrl(hostUrl);
}

/**
* Gets SOAP URL.
* @return SOAP URL
*/
public String getSoapUrl() {
  return _harvestRepository.getProtocol() instanceof ArcGISProtocol?
    ((ArcGISProtocol)_harvestRepository.getProtocol()).getSoapUrl():
    "";
}

/**
* Sets SOAP URL.
* @param url SOAP URL
*/
public void setSoapUrl(String url) {
  if (_harvestRepository.getProtocol() instanceof ArcGISProtocol) {
    ((ArcGISProtocol)_harvestRepository.getProtocol()).setSoapUrl(url);
  }
}

/**
* Gets ArcIMS properties.
* @return ArcIMS properties
*/
public HarvestProtocolArcIms getArcIms() {
  return (HarvestProtocolArcIms) protocols.get(ProtocolType.ArcIms.name());
}

/**
* Gets OAI properties.
* @return OAI properties
*/
public HarvestProtocolOai getOai() {
  return (HarvestProtocolOai) protocols.get(ProtocolType.OAI.name());
}

/**
* Gets WAF properties.
* @return WAF properties
*/
public HarvestProtocolWaf getWaf() {
  return (HarvestProtocolWaf) protocols.get(ProtocolType.WAF.name());
}

/**
* Gets CSW properties.
* @return CSW properties
*/
public HarvestProtocolCsw getCsw() {
  return (HarvestProtocolCsw) protocols.get(ProtocolType.CSW.name());
}


/**
* Gets CSW properties.
* @return CSW properties
*/
public HarvestProtocolResource getArcGis() {
  return (HarvestProtocolResource) protocols.get(ProtocolType.RES.name());
}

/**
* Gets all CSW profiles.
* @return array list of all CSW profiles id's
*/
public ArrayList<SelectItem> getAllProfiles() {
  return _cswProfilesManager.getAllItems();
}

/**
* Gets approval status.
* @return approval status
*/
public String getApprovalStatus() {
  return getRepository().getApprovalStatus().name();
}

/**
* Approval status.
* @param status approval status
*/
public void setApprovalStatus(String status) {
  getRepository().setApprovalStatus(ApprovalStatus.checkValue(status));
}
// methods =====================================================================

/**
* Prepares repository for edit.
*/
public void prepareForEdit() {
  switch (getRepository().getHarvestFrequency()) {
    case AdHoc:
      setFrequencyMode(FrequencyMode.ADHOC);
      getRepository().setHarvestFrequency(HrRecord.HarvestFrequency.Skip);
      break;
    default:
      setFrequencyMode(FrequencyMode.PERIODICAL);
      getRepository().clearAdHocEventList();
  }
}

/**
* Prepares repository for update.
*/
public void prepareForUpdate() {
  if (getFrequencyMode()== FrequencyMode.ADHOC) {
    getRepository().setHarvestFrequency(HrRecord.HarvestFrequency.AdHoc);
  } else {
    getRepository().clearAdHocEventList();
  }
}

/**
* Validates entered content.
* @param mb message broker
* @return <code>true</code> if data is valid
*/
public boolean validate(MessageBroker mb) {
  ValidatorFactory factory = ValidatorFactory.getInstance();
  IValidator validator = factory.getValidator(_harvestRepository);
  return validator!=null? validator.validate(new MessageCollectorAdaptor(mb)): true;
}

/**
* Gets string representation of the object.
* @return string representation
*/
@Override
public String toString() {
  return _harvestRepository.toString();
}

public FrequencyMode getFrequencyMode() {
  return frequencyMode;
}

public void setFrequencyMode(FrequencyMode frequencyMode) {
  this.frequencyMode = frequencyMode;
}

public String getFrequencyModeAsString() {
  return frequencyMode.name();
}

public void setFrequencyModeAsString(String frequencyMode) {
  frequencyMode = Val.chkStr(frequencyMode);
  try {
    this.frequencyMode = FrequencyMode.valueOf(frequencyMode.toUpperCase());
  } catch (IllegalArgumentException ex) {
    this.frequencyMode = FrequencyMode.PERIODICAL;
  }
}

/**
* Gets time codes.
*
* @return time codes.
*/
public String getTimeCodes() {
  return _harvestRepository.getProtocol().getAdHoc();
}

/**
* Sets time codes.
*
* @param timeCodes time codes
*/
public void setTimeCodes(String timeCodes) {
  _harvestRepository.getProtocol().setAdHoc(timeCodes);
}

/**
* Frequency mode.
*/
public static enum FrequencyMode {
  /** periodical (once every period of time) */
  PERIODICAL,
  /** ad-hoc (at the predefined exact point in time) */
  ADHOC
}
}
TOP

Related Classes of com.esri.gpt.control.harvest.HarvestEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.