2010-11-30 01:21:27 +01:00
|
|
|
package org.gcube.informationsystem.collector.stubs.metadata;
|
|
|
|
|
2011-01-19 16:00:44 +01:00
|
|
|
import java.io.ByteArrayInputStream;
|
2010-11-30 01:21:27 +01:00
|
|
|
import java.io.IOException;
|
|
|
|
import java.util.Calendar;
|
|
|
|
import java.util.GregorianCalendar;
|
|
|
|
import java.util.TimeZone;
|
|
|
|
|
|
|
|
import javax.xml.parsers.DocumentBuilderFactory;
|
|
|
|
import javax.xml.parsers.ParserConfigurationException;
|
|
|
|
|
|
|
|
import org.w3c.dom.Document;
|
|
|
|
import org.xml.sax.SAXException;
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* Metadata Record for gCube Profiles and Instance States
|
|
|
|
*
|
|
|
|
* @author Manuele Simi (ISTI-CNR)
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
public class MetadataRecord {
|
|
|
|
|
|
|
|
public static enum TYPE {INSTANCESTATE("InstanceState"),GCUBERESOURCE("Profile");
|
|
|
|
String name;
|
|
|
|
TYPE(String name) {this.name = name;}
|
|
|
|
public String toString() {return this.name;}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
private Calendar terminationTime;
|
|
|
|
|
|
|
|
private Integer time;
|
|
|
|
|
|
|
|
private String source, key, groupKey, entryKey;
|
|
|
|
|
|
|
|
private TYPE type;
|
|
|
|
|
|
|
|
|
|
|
|
protected MetadataRecord() {}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the getTerminationTime
|
|
|
|
*/
|
|
|
|
public Calendar getGetTerminationTime() {
|
|
|
|
return terminationTime;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param time this amount of time (in seconds) will be added to the current time to determine the
|
|
|
|
* resource's termination time
|
|
|
|
*/
|
|
|
|
public void setTimeToLive(Integer time) {
|
|
|
|
terminationTime = new GregorianCalendar();
|
|
|
|
terminationTime.setTimeZone(TimeZone.getTimeZone("GMT"));
|
|
|
|
//add seconds to obtain the effective termination time
|
|
|
|
terminationTime.add(Calendar.SECOND, time);
|
|
|
|
this.time = time;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the source
|
|
|
|
*/
|
|
|
|
public String getSource() {
|
|
|
|
return source;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param source the source to set
|
|
|
|
*/
|
|
|
|
public void setSource(String source) {
|
|
|
|
this.source = source;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the key
|
|
|
|
*/
|
|
|
|
public String getKey() {
|
|
|
|
return key;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param key the key to set
|
|
|
|
*/
|
|
|
|
public void setKey(String key) {
|
|
|
|
this.key = key;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the groupKey
|
|
|
|
*/
|
|
|
|
public String getGroupKey() {
|
|
|
|
return groupKey;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param groupKey the groupKey to set
|
|
|
|
*/
|
|
|
|
public void setGroupKey(String groupKey) {
|
|
|
|
this.groupKey = groupKey;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the entryKey
|
|
|
|
*/
|
|
|
|
public String getEntryKey() {
|
|
|
|
return entryKey;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param entryKey the entryKey to set
|
|
|
|
*/
|
|
|
|
public void setEntryKey(String entryKey) {
|
|
|
|
this.entryKey = entryKey;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return the type
|
|
|
|
*/
|
|
|
|
public TYPE getType() {
|
|
|
|
return type;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param type the type to set
|
|
|
|
*/
|
|
|
|
public void setType(TYPE type) {
|
|
|
|
this.type = type;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @return the time to live in seconds
|
|
|
|
*/
|
|
|
|
public Integer getTimeToLive() {
|
|
|
|
return this.time;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets a {@link Document} representation of the record
|
|
|
|
* @return a document object representing the record as XML document
|
|
|
|
* @throws SAXException
|
|
|
|
* @throws IOException
|
|
|
|
* @throws ParserConfigurationException
|
|
|
|
*/
|
|
|
|
public Document getAsDocument()
|
|
|
|
throws SAXException, IOException, ParserConfigurationException {
|
|
|
|
return DocumentBuilderFactory
|
|
|
|
.newInstance()
|
|
|
|
.newDocumentBuilder()
|
2011-01-19 16:00:44 +01:00
|
|
|
.parse(new ByteArrayInputStream(getAsBuilder().toString().getBytes("UTF-8")));
|
2010-11-30 01:21:27 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* {@inheritDoc}
|
|
|
|
*/
|
|
|
|
public String toString() {
|
|
|
|
return getAsBuilder().toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @return a {@link StringBuilder} holding the string serialization of the record
|
|
|
|
*/
|
|
|
|
private StringBuilder getAsBuilder() {
|
|
|
|
StringBuilder builder = new StringBuilder();
|
|
|
|
builder.append("<Metadata>");
|
|
|
|
builder.append("<Type>").append(this.getType().toString()).append("</Type>");
|
|
|
|
builder.append("<Source>").append(this.getSource()).append("</Source>");
|
|
|
|
builder.append("<TimeToLive>").append(this.getTimeToLive()).append("</TimeToLive>");
|
|
|
|
builder.append("<GroupKey>").append(this.getGroupKey()).append("</GroupKey>");
|
|
|
|
builder.append("<EntryKey>").append(this.getEntryKey()).append("</EntryKey>");
|
|
|
|
builder.append("<Key>").append(this.getKey()).append("</Key>");
|
|
|
|
builder.append("</Metadata>");
|
|
|
|
return builder;
|
|
|
|
}
|
|
|
|
}
|