/*
* Copyright 2013 Esri.
*
* Licensed 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.webharvest.validator;
import com.esri.gpt.catalog.harvest.protocols.HarvestProtocolAgs2Agp;
import com.esri.gpt.framework.http.HttpClientRequest;
import com.esri.gpt.framework.http.StringHandler;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* AGS to AGP protocol validator.
*/
class Ags2AgpValidator extends AgpValidator {
private String url;
private HarvestProtocolAgs2Agp protocol;
/**
* Creates instance of the validator.
*
* @param url host URL
* @param protocol protocol
*/
public Ags2AgpValidator(String url, HarvestProtocolAgs2Agp protocol) {
this.url = url;
this.protocol = protocol;
}
@Override
public boolean validate(IMessageCollector mb) {
boolean _valid = true;
if (url.isEmpty()) {
mb.addErrorMessage("catalog.harvest.manage.edit.err.hostUrlReq");
_valid = false;
}
if (!getArcgisDotComAllowed()) {
if (protocol.getDestinationHost().toLowerCase().endsWith("arcgis.com") || protocol.getDestinationHost().toLowerCase().endsWith("arcgisonline.com")) {
mb.addErrorMessage("catalog.harvest.manage.test.msg.agp2agp.arcgis.forbiden");
_valid = false;
}
}
if (_valid) {
if (protocol.getAttributeMap().getValue("ags-src-restUrl").length() == 0) {
mb.addErrorMessage("catalog.harvest.manage.edit.err.hostUrlReq");
_valid = false;
}
if (protocol.getAttributeMap().getValue("ags-src-soapUrl").length() == 0) {
mb.addErrorMessage("catalog.harvest.manage.edit.err.soapUrl");
_valid = false;
}
if (!protocol.getDestinationHost().matches(HOST_NAME_REGEX)) {
mb.addErrorMessage("catalog.harvest.manage.edit.dest.h.err");
_valid = false;
}
if (protocol.getAttributeMap().getValue("ags-dest-o").isEmpty()) {
mb.addErrorMessage("catalog.harvest.manage.edit.dest.o.err");
_valid = false;
}
if (protocol.getAttributeMap().getValue("ags-dest-u").isEmpty()) {
mb.addErrorMessage("catalog.harvest.manage.edit.dest.u.err");
_valid = false;
}
if (protocol.getAttributeMap().getValue("ags-dest-p").isEmpty()) {
mb.addErrorMessage("catalog.harvest.manage.edit.dest.p.err");
_valid = false;
}
if (protocol.getAttributeMap().getValue("ags-dest-f").isEmpty()) {
mb.addErrorMessage("catalog.harvest.manage.edit.dest.f.err");
_valid = false;
}
}
return _valid;
}
@Override
public boolean checkConnection(IMessageCollector mb) {
try {
HttpClientRequest httpRequest = new HttpClientRequest();
httpRequest.setUrl(protocol.getSourceHost());
httpRequest.setContentHandler(new StringHandler());
httpRequest.execute();
return true;
} catch (IOException ex) {
mb.addErrorMessage("catalog.harvest.manage.test.err.HarvestConnectionException");
}
return false;
}
@Override
public boolean checkDestinationConnection(IMessageCollector mb) {
return checkConnection(mb, protocol.getDestination());
}
}