dnet-core/dnet-information-service/src/main/java/eu/dnetlib/enabling/tools/ResourceType.java

162 lines
4.1 KiB
Java

package eu.dnetlib.enabling.tools;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import eu.dnetlib.enabling.is.sn.rmi.ISSNService;
import eu.dnetlib.enabling.is.store.rmi.ISStoreException;
import eu.dnetlib.enabling.is.store.rmi.ISStoreService;
/**
*
* TODO: document. TODO: Too low level, why the interfacing the Store and not the Registry ?
*
* @author michele
*
*/
public class ResourceType {
/**
* xmldb collection where resource types are stored.
*/
public static final String RESOURCE_TYPES = "DRIVERResourceTypes";
/**
* resource type. (Including kind?)
*/
private String resourceType; // NOPMD
/**
* resource schema. (Body?)
*/
private String resourceSchema; // NOPMD
/**
* file where a copy of the schema is stored locally TODO: why ?
*/
private File fileSchema;
/**
* instanciate an already registered resource type, fetching it from the store.
*
* @param resourceType
* resourceType name
* @param store
* store service where the type is stored
* @param basedir
* base dir where a local copy is held (why?)
* @throws ISStoreException
* happens
*/
public ResourceType(final String resourceType, final ISStoreService store, final String basedir) throws ISStoreException {
this(resourceType, store.getXML(resourceType, RESOURCE_TYPES), basedir);
}
/**
* construct a resource type.
*
* @param resourceType
* resourceType name
* @param resourceSchema
* resourceSchema xsd body
* @param basedir
* base directory of some local copy (?)
* @throws ISStoreException
* happens
*/
public ResourceType(final String resourceType, final String resourceSchema, final String basedir) throws ISStoreException {
this.resourceType = resourceType;
this.resourceSchema = resourceSchema;
if (basedir != null)
this.fileSchema = saveSchemaAsFile(basedir);
}
/**
* stores the schema on the xmldb.
*
* @param store
* store service
* @throws ISStoreException
* happens
*/
public void store(final ISStoreService store) throws ISStoreException {
store.insertXML(resourceType, RESOURCE_TYPES, resourceSchema);
}
/**
* updates the in memory resource instance from the store.
*
* @param store store service
* @throws ISStoreException happens
*/
public void update(final ISStoreService store) throws ISStoreException {
store.updateXML(resourceType, RESOURCE_TYPES, resourceSchema);
}
/**
* save the schema to a file.
*
* @param basedir
* base directory
* @return the newly created file
* @throws ISStoreException
* happens, even if the file cannot be created.
*/
private File saveSchemaAsFile(final String basedir) throws ISStoreException {
fileSchema = new File(basedir + "/" + resourceType);
if (!fileSchema.exists()) {
try {
final BufferedWriter out = new BufferedWriter(new FileWriter(fileSchema));
out.write(resourceSchema);
out.close();
} catch (IOException e) {
throw new ISStoreException("Error saving file", e);
}
}
return fileSchema;
}
/**
* it says "delete and notify" but it only deletes the schema from the filesystem and from the store.
*
* TODO: document and possibly refactor.
*
* @param store
* store service
* @param issn
* ISSN service
* @throws ISStoreException
* happens
*/
public void deleteAndNotify(final ISStoreService store, final ISSNService issn) throws ISStoreException {
fileSchema.delete();
store.deleteXML(resourceType, RESOURCE_TYPES);
}
public String getResourceType() {
return resourceType;
}
public void setResourceType(final String resourceType) {
this.resourceType = resourceType;
}
public String getResourceSchema() {
return resourceSchema;
}
public void setResourceSchema(final String resourceSchema) {
this.resourceSchema = resourceSchema;
}
public File getFileSchema() {
return fileSchema;
}
public void setFileSchema(final File fileSchema) {
this.fileSchema = fileSchema;
}
}