/**
* Copyright 2007-2010 非也
* All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License v3 as published by the Free Software
* Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this library; if not, see http://www.gnu.org/licenses/lgpl.html.
*
*/
package org.fireflow.server.support;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import org.fireflow.engine.entity.EntityProperty;
import org.fireflow.engine.entity.WorkflowEntity;
import org.fireflow.engine.entity.config.FireflowConfigProperty;
import org.fireflow.engine.entity.config.ReassignConfigProperty;
import org.fireflow.engine.entity.repository.ProcessDescriptorProperty;
import org.fireflow.engine.entity.runtime.ActivityInstanceProperty;
import org.fireflow.engine.entity.runtime.ProcessInstanceProperty;
import org.fireflow.engine.entity.runtime.ScheduleJobProperty;
import org.fireflow.engine.entity.runtime.VariableProperty;
import org.fireflow.engine.entity.runtime.WorkItemProperty;
import org.fireflow.pvm.kernel.TokenProperty;
/**
*
* @author 非也 nychen2000@163.com
* Fire Workflow 官方网站:www.firesoa.com 或者 www.fireflow.org
*
*/
public class EntityPropertyXmlAdapter extends
XmlAdapter<String, EntityProperty> {
/* (non-Javadoc)
* @see javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal(java.lang.Object)
*/
@Override
public EntityProperty unmarshal(String v) throws Exception {
if (v==null || v.trim().equals(""))return null;
if (v.startsWith(WorkflowEntity.ENTITY_NAME_ACTIVITY_INSTANCE+".")){
return ActivityInstanceProperty.fromValue(v.substring(WorkflowEntity.ENTITY_NAME_ACTIVITY_INSTANCE.length()+1));
}else if (v.startsWith(WorkflowEntity.ENTITY_NAME_FIREFLOW_CONFIG+".")){
return FireflowConfigProperty.fromValue(v.substring(WorkflowEntity.ENTITY_NAME_FIREFLOW_CONFIG.length()+1));
}
else if (v.startsWith(WorkflowEntity.ENTITY_NAME_PROCESS_DESCRIPTOR+".")){
return ProcessDescriptorProperty.fromValue(v.substring(WorkflowEntity.ENTITY_NAME_PROCESS_DESCRIPTOR.length()+1));
}
else if (v.startsWith(WorkflowEntity.ENTITY_NAME_PROCESS_INSTANCE+".")){
return ProcessInstanceProperty.fromValue(v.substring(WorkflowEntity.ENTITY_NAME_PROCESS_INSTANCE.length()+1));
}
else if (v.startsWith(WorkflowEntity.ENTITY_NAME_REASSIGN_CONFIG+".")){
return ReassignConfigProperty.fromValue(v.substring(WorkflowEntity.ENTITY_NAME_REASSIGN_CONFIG.length()+1));
}
// else if (v.startsWith(WorkflowEntity.ENTITY_NAME_RESOUCE_DESCRIPTOR+".")){
// return ResourceDescriptorProperty.fromValue(v.substring(WorkflowEntity.ENTITY_NAME_RESOUCE_DESCRIPTOR.length()+1));
// }
else if (v.startsWith(WorkflowEntity.ENTITY_NAME_SCHEDULE_JOB+".")){
return ScheduleJobProperty.fromValue(v.substring(WorkflowEntity.ENTITY_NAME_SCHEDULE_JOB.length()+1));
}
// else if (v.startsWith(WorkflowEntity.ENTITY_NAME_SERVICE_DESCRIPTOR+".")){
// return ServiceDescriptorProperty.fromValue(v.substring(WorkflowEntity.ENTITY_NAME_SERVICE_DESCRIPTOR.length()+1));
// }
else if (v.startsWith(WorkflowEntity.ENTITY_NAME_TOKEN+".")){
return TokenProperty.fromValue(v.substring(WorkflowEntity.ENTITY_NAME_TOKEN.length()+1));
}
else if (v.startsWith(WorkflowEntity.ENTITY_NAME_VARIABLE+".")){
return VariableProperty.fromValue(v.substring(WorkflowEntity.ENTITY_NAME_VARIABLE.length()+1));
}else if (v.startsWith(WorkflowEntity.ENTITY_NAME_WORKITEM+".")){
return WorkItemProperty.fromValue(v.substring(WorkflowEntity.ENTITY_NAME_WORKITEM.length()+1));
}
return null;
}
/* (non-Javadoc)
* @see javax.xml.bind.annotation.adapters.XmlAdapter#marshal(java.lang.Object)
*/
@Override
public String marshal(EntityProperty v) throws Exception {
if (v==null)return null;
return v.getEntityName()+"."+v.getPropertyName();
}
}