/* 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.webharvest.protocol;
import com.esri.gpt.control.webharvest.IterationContext;
import com.esri.gpt.control.webharvest.engine.DataProcessor;
import com.esri.gpt.control.webharvest.engine.ExecutionUnit;
import com.esri.gpt.control.webharvest.engine.Executor;
import com.esri.gpt.control.webharvest.engine.IWorker;
import com.esri.gpt.framework.collection.StringAttributeMap;
import com.esri.gpt.framework.resource.query.QueryBuilder;
/**
* Protocol.
*/
public interface Protocol {
/**
* Gets protocol kind.
* @return protocol kind
*/
String getKind();
/**
* Gets protocol attributes map. Used to exchange attributes with the form.
* @return attributes map
*/
StringAttributeMap getAttributeMap();
/**
* Sets protocol attributes map. Used to exchange attributes with the form.
* @param attributeMap attributes map
*/
void setAttributeMap(StringAttributeMap attributeMap);
/**
* Extracts protocol attributes map. Used saving (typically encrypts user name/password).
* @return attributes map
*/
StringAttributeMap extractAttributeMap();
/**
* Applies protocol attributes map. Used loading (typically decrypts user name/password).
* @param attributeMap attributes map
*/
void applyAttributeMap(StringAttributeMap attributeMap);
/**
* Gets flag set.
* @return flags set
*/
long getFlags();
/**
* Sets flag set.
* @param flags flag set
*/
void setFlags(long flags);
/**
* Creates new query builder.
* @param context iteration context
* @param url url
* @return query builder
*/
QueryBuilder newQueryBuilder(IterationContext context, String url);
/**
* Creates new executor.
* @param dataProcessor data processor
* @param unit execution unit
* @param worker worker
* @return executor
*/
Executor newExecutor(DataProcessor dataProcessor, ExecutionUnit unit, IWorker worker);
/**
* Gets ad-hoc harvesting info.
* <p>
* Ad-hoc information allows to store precise definition or pattern of the time
* when harvesting should occur. Ad-hoc is a pipe (|) separated set of time definitions.
* Currently, the following syntax is supported:
* <ul>
* <li>
* <b>hh:mm</b> - daily at a certain time, for example: 10:05 (every day at 10:05)
* </li>
* <li>
* <b><day of the week>,hh:mm</b> - every specified day of the week at a certain time, for example: SUNDAY,10:05 (every Sunday at 10:05)
* </li>
* <li>
* <b><day of the month>,hh:mm</b> - every specified day of the month at a certain time, for example: 7,10:05 (every seventh day of the month at 10:05
* </li>
* <li>
* <b><n-th day of the week>,<day of the week>,hh:mm</b> - every specified day of the week at a certain time, for example: 1,MONDAY,10:05 (every first Monday of the month at 10:05)
* </li>
* <li>
* <b>yyyy-MM-ddThh:mm</b> - at the specific date and time, for example: 2013-03-17T10:05 (precisely on 17-th of March, 2013 at 10:05)
* </li>
* </ul>
* </p>
* @return ad-hoc
*/
String getAdHoc();
/**
* Sets ad-hoc info.
* @param adHoc ad-hoc info
* @see #setAdHoc
*/
void setAdHoc(String adHoc);
}