/*******************************************************************************
* Copyright (c) 2010, G. Weirich and Elexis
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* G. Weirich - initial implementation
*
*******************************************************************************/
package ch.elexis.data;
import java.util.HashMap;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import ch.elexis.core.data.constants.ExtensionPointConstantsData;
import ch.elexis.core.data.events.ElexisEvent;
import ch.elexis.core.data.events.ElexisEventDispatcher;
import ch.elexis.core.data.interfaces.IOutputter;
import ch.elexis.core.data.util.Extensions;
import ch.rgw.tools.ExHandler;
import ch.rgw.tools.TimeTool;
/**
* An OutputLog instance carries the information when and where to a PersistentObject has been sent.
*
* @author gerry
*
*/
public class OutputLog extends PersistentObject {
public static final String FLD_OBJECT_TYPE = "ObjectType";
public static final String FLD_OBJECT_ID = "ObjectID";
public static final String FLD_OUTPUTTER = "Outputter";
static final String TABLENAME = "OUTPUT_LOG";
static final HashMap<String, IOutputter> outputter_cache = new HashMap<String, IOutputter>();
static {
addMapping(TABLENAME, FLD_OBJECT_ID, FLD_OBJECT_TYPE, FLD_OUTPUTTER, DATE_COMPOUND,
FLD_EXTINFO);
}
public OutputLog(PersistentObject po, IOutputter io){
create(null);
set(new String[] {
FLD_OBJECT_ID, FLD_OBJECT_TYPE, FLD_DATE, FLD_OUTPUTTER
}, po.getId(), po.getClass().getName(), new TimeTool().toString(TimeTool.DATE_GER),
io.getOutputterID());
ElexisEventDispatcher.getInstance().fire(
new ElexisEvent(po, po.getClass(), ElexisEvent.EVENT_UPDATE));
}
@Override
public String getLabel(){
return get(FLD_DATE) + ":" + get(FLD_OUTPUTTER);
}
public String getOutputterID(){
return checkNull(get(FLD_OUTPUTTER));
}
public static List<OutputLog> getOutputs(PersistentObject po){
Query<OutputLog> qbe = new Query<OutputLog>(OutputLog.class);
qbe.add(FLD_OBJECT_ID, Query.EQUALS, po.getId());
qbe.orderBy(true, FLD_LASTUPDATE);
return qbe.execute();
}
public static IOutputter getOutputter(String outputterID){
IOutputter ret = outputter_cache.get(outputterID);
if (ret == null) {
List<IConfigurationElement> eps =
Extensions.getExtensions(ExtensionPointConstantsData.OUTPUT_LOG_DESCRIPTOR);
for (IConfigurationElement ep : eps) {
String id = ep.getAttribute("id");
if (id != null && id.equals(outputterID)) {
try {
ret = (IOutputter) ep.createExecutableExtension("Outputter");
outputter_cache.put(outputterID, ret);
break;
} catch (CoreException ex) {
ExHandler.handle(ex);
}
}
}
}
return ret;
}
@Override
protected String getTableName(){
return TABLENAME;
}
public static OutputLog load(String id){
return new OutputLog(id);
}
protected OutputLog(String id){
super(id);
}
OutputLog(){}
}