/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.esri.gpt.server.assertion.index;
import com.esri.gpt.framework.util.Val;
import com.esri.gpt.server.assertion.components.AsnConstants;
import java.sql.Timestamp;
import java.text.ParseException;
import java.util.UUID;
import org.apache.lucene.document.DateTools;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
/**
* Represents the system fields associated with a assertion.
*/
public class AsnSystemPart {
/** instance variables ====================================================== */
private String assertionId;
private Timestamp editTimestamp;
private boolean enabled = true;
private String resourceId;
private Timestamp timestamp;
/** constructors ============================================================ */
/** Default constructor */
public AsnSystemPart() {}
/**
* Construct by duplicating an existing object.
* @param objectToDuplicate the object to duplicate
*/
public AsnSystemPart(AsnSystemPart objectToDuplicate) {
if (objectToDuplicate != null) {
this.setAssertionId(objectToDuplicate.getAssertionId());
this.setEditTimestamp(objectToDuplicate.getEditTimestamp());
this.setEnabled(objectToDuplicate.getEnabled());
this.setResourceId(objectToDuplicate.getResourceId());
this.setTimestamp(objectToDuplicate.getTimestamp());
}
}
/** properties ============================================================== */
/**
* Gets the assertion id (primary key).
* @return the assertion id
*/
public String getAssertionId() {
return this.assertionId;
}
/**
* Sets the assertion id (primary key).
* @param assertionId the assertion id
*/
public void setAssertionId(String assertionId) {
this.assertionId = assertionId;
}
/**
* Gets the edit timestamp (last value edit).
* @return the timestamp
*/
public Timestamp getEditTimestamp() {
return this.editTimestamp;
}
/**
* Sets the edit timestamp (last value edit).
* @param timestamp the timestamp
*/
public void setEditTimestamp(Timestamp timestamp) {
this.editTimestamp = timestamp;
}
/**
* Gets the flag indicating whether or not the assertion is enabled.
* @return <code>true</code> if enabled
*/
public boolean getEnabled() {
return this.enabled;
}
/**
* Sets the flag indicating whether or not the assertion is enabled.
* @param enabled <code>true</code> if enabled
*/
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
/**
* Gets the associated resource document uuid.
* @return the resource document uuid
*/
public String getResourceId() {
return this.resourceId;
}
/**
* Sets the associated resource document id.
* @param resourceId the resource document id
*/
public void setResourceId(String resourceId) {
this.resourceId = resourceId;
}
/**
* Gets the timestamp.
* @return the timestamp
*/
public Timestamp getTimestamp() {
return this.timestamp;
}
/**
* Sets the timestamp.
* @param timestamp the timestamp
*/
public void setTimestamp(Timestamp timestamp) {
this.timestamp = timestamp;
}
/** methods ================================================================= */
/**
* Appends fields to a document for indexing.
* @param document the document
*/
public void appendWritableFields(Document document) {
Field fld;
String val;
long millis;
// sys.assertionid
val = Val.chkStr(this.getAssertionId());
if (val.length() == 0) {
this.setAssertionId(UUID.randomUUID().toString());
val = Val.chkStr(this.getAssertionId());
}
fld = new Field(AsnConstants.FIELD_SYS_ASSERTIONID,val,
Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO);
document.add(fld);
// sys.edit.timestamp
if (this.getEditTimestamp() != null) {
millis = this.getEditTimestamp().getTime();
val = DateTools.timeToString(millis,DateTools.Resolution.MILLISECOND);
fld = new Field(AsnConstants.FIELD_SYS_EDIT_TIMESTAMP,val,
Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO);
document.add(fld);
}
// sys.enabled
if (!this.getEnabled()) {
fld = new Field(AsnConstants.FIELD_SYS_ENABLED,"false",
Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO);
document.add(fld);
}
// sys.resourceid
val = Val.chkStr(this.getResourceId());
if (val.length() > 0) {
fld = new Field(AsnConstants.FIELD_SYS_RESOURCEID,val,
Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO);
document.add(fld);
}
// sys.timestamp
if (this.getTimestamp() == null) {
this.setTimestamp(new Timestamp(System.currentTimeMillis()));
}
millis = this.getTimestamp().getTime();
val = DateTools.timeToString(millis,DateTools.Resolution.MILLISECOND);
fld = new Field(AsnConstants.FIELD_SYS_TIMESTAMP,val,
Field.Store.YES,Field.Index.NOT_ANALYZED,Field.TermVector.NO);
document.add(fld);
}
/**
* Produces a deep clone of the object.
* <br/>The duplication constructor is invoked.
* <br/>return new AsnSystemPart(this);
* @return the duplicated object
*/
public AsnSystemPart duplicate() {
return new AsnSystemPart(this);
}
/**
* Appends property information for the component to a buffer.
* @param sb the buffer to use when appending information
* @param depth the depth of the parent
*/
public void echo(StringBuffer sb, int depth) {
String pfx = "\n";
for (int i=0;i<2*depth;i++) pfx += " ";
sb.append(pfx).append(AsnConstants.FIELD_SYS_ASSERTIONID+"=").append(this.getAssertionId());
sb.append(pfx).append(AsnConstants.FIELD_SYS_ENABLED+"=").append(this.getEnabled());
sb.append(pfx).append(AsnConstants.FIELD_SYS_RESOURCEID+"=").append(this.getResourceId());
sb.append(pfx).append(AsnConstants.FIELD_SYS_TIMESTAMP+"=").append(this.getTimestamp());
sb.append(pfx).append(AsnConstants.FIELD_SYS_EDIT_TIMESTAMP+"=").append(this.getEditTimestamp());
}
/**
* Reads the fields of an indexed document.
* @param document the document
*/
public void readFields(Document document) {
String val;
this.setAssertionId(document.get(AsnConstants.FIELD_SYS_ASSERTIONID));
this.setResourceId(document.get(AsnConstants.FIELD_SYS_RESOURCEID));
val = Val.chkStr(document.get(AsnConstants.FIELD_SYS_ENABLED));
this.setEnabled(!val.equals("false"));
val = document.get(AsnConstants.FIELD_SYS_TIMESTAMP);
if ((val != null) && (val.length() > 0)) {
try {
long millis = DateTools.stringToTime(val);
this.setTimestamp(new Timestamp(millis));
} catch (ParseException e) {
// not fatal
}
}
val = document.get(AsnConstants.FIELD_SYS_EDIT_TIMESTAMP);
if ((val != null) && (val.length() > 0)) {
try {
long millis = DateTools.stringToTime(val);
this.setEditTimestamp(new Timestamp(millis));
} catch (ParseException e) {
// not fatal
}
}
}
}