/*
* #%L
* ACS AEM Commons Bundle
* %%
* Copyright (C) 2016 Adobe
* %%
* 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.
* #L%
*/
package com.adobe.acs.commons.workflow.synthetic.impl.cq;
import com.adobe.acs.commons.workflow.synthetic.impl.SyntheticWorkflowData;
import com.day.cq.workflow.exec.WorkItem;
import com.day.cq.workflow.exec.Workflow;
import com.day.cq.workflow.exec.WorkflowData;
import com.day.cq.workflow.exec.filter.WorkItemFilter;
import com.day.cq.workflow.metadata.MetaDataMap;
import com.day.cq.workflow.model.WorkflowModel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.List;
public class SyntheticWorkflow implements Workflow {
private final String id;
private final Date timeStarted;
private SyntheticWorkflowData workflowData;
private SyntheticWorkItem activeWorkItem;
public SyntheticWorkflow(final String id,
final SyntheticWorkflowData workflowData) {
this.id = id;
this.workflowData = workflowData;
this.timeStarted = new Date();
}
public final void setActiveWorkItem(final SyntheticWorkItem workItem) {
this.activeWorkItem = workItem;
}
@Override
public final String getId() {
return this.id;
}
@Override
public final List<WorkItem> getWorkItems() {
return Arrays.asList(new WorkItem[]{this.activeWorkItem});
}
@Override
public final List<WorkItem> getWorkItems(final WorkItemFilter workItemFilter) {
final List<WorkItem> filtered = new ArrayList<WorkItem>();
for (final WorkItem workItem : this.getWorkItems()) {
if (workItemFilter.doInclude(workItem)) {
filtered.add(workItem);
}
}
return filtered;
}
@Override
public final WorkflowModel getWorkflowModel() {
return null;
}
@Override
public final boolean isActive() {
return true;
}
@Override
public final String getState() {
return "Synthetic Running";
}
@Override
public final String getInitiator() {
return "Synthetic Workflow";
}
@Override
public final Date getTimeStarted() {
return (Date) this.timeStarted.clone();
}
@Override
public final Date getTimeEnded() {
return null;
}
@Override
public final WorkflowData getWorkflowData() {
return this.workflowData;
}
public final void setWorkflowData(final WorkflowData workflowData) {
this.workflowData.resetTo(workflowData);
}
@Deprecated
@Override
public final Dictionary<String, String> getMetaData() {
final Dictionary<String, String> dictionary = new Hashtable<String, String>();
for (String key : this.getMetaDataMap().keySet()) {
dictionary.put(key, this.getMetaDataMap().get(key, String.class));
}
return dictionary;
}
@Override
public final MetaDataMap getMetaDataMap() {
return this.getWorkflowData().getMetaDataMap();
}
}