/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF 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 org.apache.hise.engine.jaxws; import java.math.BigInteger; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import javax.annotation.Resource; import javax.inject.Inject; import javax.jws.WebService; import javax.xml.datatype.Duration; import javax.xml.namespace.QName; import javax.xml.ws.Holder; import javax.xml.ws.WebServiceContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hise.dao.GenericHumanRole; import org.apache.hise.dao.TaskQuery; import org.apache.hise.dao.Transactional; import org.apache.hise.engine.HISEEngineImpl; import org.apache.hise.engine.wsdl.IllegalAccessFault; import org.apache.hise.engine.wsdl.IllegalArgumentFault; import org.apache.hise.engine.wsdl.IllegalOperationFault; import org.apache.hise.engine.wsdl.IllegalStateFault; import org.apache.hise.engine.wsdl.RecipientNotAllowed; import org.apache.hise.engine.wsdl.TaskOperations; import org.apache.hise.lang.xsd.htd.TOrganizationalEntity; import org.apache.hise.lang.xsd.htda.TAttachment; import org.apache.hise.lang.xsd.htda.TAttachmentInfo; import org.apache.hise.lang.xsd.htda.TComment; import org.apache.hise.lang.xsd.htda.TStatus; import org.apache.hise.lang.xsd.htda.TTask; import org.apache.hise.lang.xsd.htda.TTaskAbstract; import org.apache.hise.lang.xsd.htda.TTaskQueryResultSet; import org.apache.hise.lang.xsd.htdt.TTime; import org.apache.hise.runtime.HiseIllegalAccessException; import org.apache.hise.runtime.HiseIllegalStateException; import org.apache.hise.runtime.Task; import org.w3c.dom.Node; /** * Implementation of WS-HT API. Operations are executed by end users, i.e. * actual or potential owners. The identity of the user is implicitly passed * when invoking any of the operations listed in the table below. The * participant operations listed below only apply to tasks unless explicitly * noted otherwise. The authorization column indicates people of which roles are * authorized to perform the operation. Stakeholders of the task are not * mentioned explicitly. They have the same authorization rights as business * administrators. * * @author Witek Wołejszo * @author Warren Crossing */ @Transactional @WebService public class TaskOperationsImpl implements TaskOperations { private static final Log log = LogFactory.getLog(TaskOperationsImpl.class); @Inject HISEEngineImpl hiseEngine; @Resource WebServiceContext context; public void setWebServiceContext(WebServiceContext context) { this.context = context; } protected String getUserString() { return context.getUserPrincipal().getName(); } // implementation in progress /** * {@inheritDoc} */ public List<TTask> getMyTasks(String taskType, String genericHumanRole, String workQueue, List<TStatus> status, String whereClause, String createdOnClause, Integer maxTasks) throws IllegalArgumentFault, IllegalStateFault { List<TTask> result = new ArrayList<TTask>(); String user = getUserString(); TaskQuery query = new TaskQuery(); query.setUser(user); query.setUserGroups(hiseEngine.getHiseUserDetails().getUserGroups(user)); query.setTaskType(taskType); query.setGenericHumanRole(GenericHumanRole.valueOf(genericHumanRole)); query.setWorkQueue(workQueue); query.setStatuses(status); query.setWhereClause(whereClause); query.setCreatedOnClause(createdOnClause); if (maxTasks != null) { query.setMaxTasks(maxTasks); } List<org.apache.hise.dao.Task> tasks = hiseEngine.getHiseDao().getUserTasks(query); for (org.apache.hise.dao.Task u : tasks) { TTask t = convertTask(u.getId()); result.add(t); } return result; } /** * {@inheritDoc} */ public Object getInput(String identifier, String part) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); return t.getInput(part); } /** * {@inheritDoc} */ public Object getOutput(String identifier, String part) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); return t.getOutput(part); } /** * {@inheritDoc} */ public void stop(String identifier) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); try { t.stop(); } catch (HiseIllegalStateException e) { throw new IllegalStateFault(e.getMessage()); } } public void suspend(String identifier) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); try { t.suspend(); } catch (HiseIllegalStateException e) { throw new IllegalStateFault(e.getMessage()); } } public void suspendUntil(String identifier, TTime time) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); Date when = time.getPointOfTime(); if (when == null) { Duration when2 = time.getTimePeriod(); when = Calendar.getInstance().getTime(); when2.addTo(when); } try { t.suspendUntil(when); } catch (HiseIllegalStateException e) { throw new IllegalStateFault(e.getMessage()); } } public void remove(String identifier) throws IllegalAccessFault, IllegalArgumentFault { Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); t.remove(); } public void resume(String identifier) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // OrgEntity user = loadUser(); Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); try { t.resume(); } catch (HiseIllegalStateException e) { throw new IllegalStateFault(e.getMessage()); } } public org.apache.hise.lang.xsd.htda.TTask getTaskInfo(String identifier) throws IllegalArgumentFault { return convertTask(hiseEngine.getHiseDao().find(org.apache.hise.dao.Task.class, Long.parseLong(identifier)).getId()); } public void claim(String identifier) throws IllegalArgumentFault, IllegalStateFault, IllegalAccessFault { Task task = Task.load(hiseEngine, Long.valueOf(identifier)); task.setCurrentUser(getUserString()); try { task.claim(); } catch (HiseIllegalStateException e) { throw new IllegalStateFault(e.getMessage()); } catch (HiseIllegalAccessException e) { throw new IllegalAccessFault(e.getMessage()); } } public void fail(String identifier, String faultName, Object faultData) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault, IllegalOperationFault { Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); try { t.fail(); } catch (HiseIllegalStateException e) { throw new IllegalStateFault(e.getMessage()); } } public void forward(String identifier, TOrganizationalEntity organizationalEntity) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); try { t.forward(organizationalEntity); } catch (HiseIllegalStateException e) { throw new IllegalStateFault(e.getMessage()); } } public String getTaskDescription(String identifier, String contentType) throws IllegalArgumentFault { Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); return t.getTaskEvaluator().evalPresentationDescription(); } public void release(String identifier) throws IllegalArgumentFault, IllegalStateFault, IllegalAccessFault { Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); try { t.release(); } catch (HiseIllegalStateException e) { throw new IllegalStateFault(e.getMessage()); } } public void start(String identifier) throws IllegalArgumentFault, IllegalStateFault, IllegalAccessFault { Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); try { t.start(); } catch (HiseIllegalStateException e) { throw new IllegalStateFault(e.getMessage()); } } public void complete(String identifier, Object taskData) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { Task t = Task.load(hiseEngine, Long.parseLong(identifier)); t.setCurrentUser(getUserString()); //TODO set output //t.setOutput(((Node) taskData).getFirstChild()); try { t.complete(); } catch (HiseIllegalStateException e) { throw new IllegalStateFault(e.getMessage()); } } public void setOutput(String identifier, String part, Object taskData) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { Task t = Task.load(hiseEngine, Long.valueOf(identifier)); t.setCurrentUser(getUserString()); t.setOutput(((Node) taskData).getFirstChild()); } // not started public TTaskQueryResultSet query(String selectClause, String whereClause, String orderByClause, Integer maxTasks, Integer taskIndexOffset) throws IllegalArgumentFault, IllegalStateFault { // TODO Auto-generated method stub return null; } public void activate(String identifier) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // TODO Auto-generated method stub } public void addAttachment(String identifier, String name, String accessType, Object attachment) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // TODO Auto-generated method stub } public void addComment(String identifier, String text) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // TODO Auto-generated method stub } public void delegate(String identifier, TOrganizationalEntity organizationalEntity) throws IllegalAccessFault, IllegalStateFault, RecipientNotAllowed, IllegalArgumentFault { // TODO Auto-generated method stub } public void deleteAttachments(String identifier, String attachmentName) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // TODO Auto-generated method stub } public void deleteFault(String identifier) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // TODO Auto-generated method stub } public void deleteOutput(String identifier) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // TODO Auto-generated method stub } public List<TAttachmentInfo> getAttachmentInfos(String identifier) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // TODO Auto-generated method stub return null; } public List<TAttachment> getAttachments(String identifier, String attachmentName) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // TODO Auto-generated method stub return null; } public List<TComment> getComments(String identifier) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // TODO Auto-generated method stub return null; } public Object getRendering(Object identifier, QName renderingType) throws IllegalArgumentFault { // TODO Auto-generated method stub return null; } public List<QName> getRenderingTypes(Object identifier) throws IllegalArgumentFault { // TODO Auto-generated method stub return null; } public void nominate(String identifier, TOrganizationalEntity organizationalEntity) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // TODO Auto-generated method stub } public void setFault(String identifier, String faultName, Object faultData) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault, IllegalOperationFault { // TODO Auto-generated method stub } public void setGenericHumanRole(String identifier, String genericHumanRole, TOrganizationalEntity organizationalEntity) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // TODO Auto-generated method stub } public void setPriority(String identifier, BigInteger priority) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault { // TODO Auto-generated method stub } public void skip(String identifier) throws IllegalAccessFault, IllegalStateFault, IllegalArgumentFault, IllegalOperationFault { // TODO Auto-generated method stub } public void getFault(String identifier, Holder<String> faultName, Holder<Object> faultData) throws IllegalArgumentFault, IllegalStateFault, IllegalOperationFault, IllegalAccessFault { // TODO Auto-generated method stub } public List<TTaskAbstract> getMyTaskAbstracts(String taskType, String genericHumanRole, String workQueue, List<TStatus> status, String whereClause, String createdOnClause, Integer maxTasks) throws IllegalArgumentFault, IllegalStateFault { // TODO Auto-generated method stub return null; } // Util private TTask convertTask(Long id) { Task task = Task.load(hiseEngine, id); org.apache.hise.dao.Task taskDto = task.getTaskDto(); TTask result = new TTask(); result.withId(taskDto.getId().toString()). withTaskType(taskDto.isNotification() ? "NOTIFICATION" : "TASK"). withCreatedOn(taskDto.getCreatedOn()). withActivationTime(taskDto.getActivationTime()). withCreatedBy(taskDto.getCreatedBy()). withPresentationName(task.getTaskEvaluator().getPresentationName()). withPresentationSubject(task.getTaskEvaluator().evalPresentationSubject()). withName(taskDto.getTaskDefinitionName()). withStatus(TStatus.fromValue(taskDto.getStatus().toString())); if (taskDto.getActualOwner() != null) { result.setActualOwner(taskDto.getActualOwner()); } return result; } /** * IoC setter. * * @param hiseEngine */ public void setHiseEngine(HISEEngineImpl hiseEngine) { this.hiseEngine = hiseEngine; } }