AbstractModelDefinitionPersistenceService.java
package cern.accsoft.steering.jmad.modeldefs.io.impl;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import cern.accsoft.steering.jmad.domain.beam.Beam;
import cern.accsoft.steering.jmad.domain.file.AbstractModelFile;
import cern.accsoft.steering.jmad.domain.file.CallableModelFileImpl;
import cern.accsoft.steering.jmad.domain.file.ModelPathOffsets;
import cern.accsoft.steering.jmad.domain.file.ModelPathOffsetsImpl;
import cern.accsoft.steering.jmad.domain.file.TableModelFileImpl;
import cern.accsoft.steering.jmad.domain.machine.MadxRange;
import cern.accsoft.steering.jmad.domain.machine.RangeDefinitionImpl;
import cern.accsoft.steering.jmad.domain.machine.SequenceDefinitionImpl;
import cern.accsoft.steering.jmad.domain.machine.filter.RegexNameFilter;
import cern.accsoft.steering.jmad.modeldefs.domain.JMadModelDefinition;
import cern.accsoft.steering.jmad.modeldefs.domain.JMadModelDefinitionImpl;
import cern.accsoft.steering.jmad.modeldefs.domain.OpticsDefinitionImpl;
import cern.accsoft.steering.jmad.modeldefs.io.JMadModelDefinitionExportRequest;
import cern.accsoft.steering.jmad.modeldefs.io.ModelDefinitionPersistenceService;
import cern.accsoft.steering.jmad.util.xml.GenericXStreamService;
import cern.accsoft.steering.jmad.util.xml.PersistenceService;
import cern.accsoft.steering.jmad.util.xml.PersistenceServiceException;
import com.thoughtworks.xstream.XStream;
public abstract class AbstractModelDefinitionPersistenceService implements ModelDefinitionPersistenceService {
@Override
public JMadModelDefinition clone(JMadModelDefinition object) throws PersistenceServiceException {
return this.getXStreamService().clone(object);
}
@Override
public String getFileExtension() {
return this.getXStreamService().getFileExtension();
}
@Override
public boolean isCorrectFileName(String fileName) {
return this.getXStreamService().isCorrectFileName(fileName);
}
@Override
public JMadModelDefinition load(File file) throws PersistenceServiceException {
return this.getXStreamService().load(file);
}
@Override
public JMadModelDefinition load(InputStream inputStream) throws PersistenceServiceException {
return this.getXStreamService().load(inputStream);
}
@Override
public File save(JMadModelDefinitionExportRequest object, File file) throws PersistenceServiceException {
return this.getXStreamService().save(object.getModelDefinition(), file);
}
@Override
public void save(JMadModelDefinitionExportRequest object, OutputStream outStream)
throws PersistenceServiceException {
this.getXStreamService().save(object.getModelDefinition(), outStream);
}
/**
* @return the {@link GenericXStreamService} to use in this
* {@link PersistenceService} for the {@link JMadModelDefinition}s
*/
protected abstract GenericXStreamService<JMadModelDefinition> getXStreamService();
protected Class<JMadModelDefinitionImpl> getSaveableClass() {
return JMadModelDefinitionImpl.class;
}
protected final void configureXStream(XStream xStream) {
/* and process the annotations of all classes we need */
xStream.autodetectAnnotations(true);
Class<?>[] classes = new Class<?>[] { JMadModelDefinitionImpl.class, //
CallableModelFileImpl.class, //
AbstractModelFile.class, //
TableModelFileImpl.class, //
Beam.class, //
SequenceDefinitionImpl.class, //
RangeDefinitionImpl.class, //
OpticsDefinitionImpl.class, //
MadxRange.class, //
ModelPathOffsetsImpl.class, //
RegexNameFilter.class };
xStream.processAnnotations(classes);
/*
* To avoid using references
*/
xStream.addImmutableType(CallableModelFileImpl.class);
/* The default implementations */
xStream.addDefaultImplementation(ModelPathOffsetsImpl.class, ModelPathOffsets.class);
}
}