Author: [log in to unmask]
Date: Tue Nov 25 01:48:21 2014
New Revision: 1579
Log:
Simplify conditions object API by removing unnecessary methods.
Modified:
java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObject.java
java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObject.java
java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java
Modified: java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObject.java
=============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObject.java (original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/AbstractConditionsObject.java Tue Nov 25 01:48:21 2014
@@ -19,8 +19,6 @@
private TableMetaData tableMetaData = null;
protected int rowId = -1;
protected int collectionId = -1;
- protected boolean isDirty = false;
- protected boolean isReadOnly = false;
protected FieldValueMap fieldValues;
/**
@@ -42,40 +40,24 @@
return collectionId;
}
- public boolean isReadOnly() {
- return isReadOnly;
- }
-
public boolean isNew() {
return rowId == -1;
}
- public boolean isDirty() {
- return isDirty;
- }
-
public void delete() throws ConditionsObjectException {
- if (isReadOnly()) {
- throw new ConditionsObjectException("This object is set to read only.");
- }
- if (isNew()) {
- throw new ConditionsObjectException("This object is not in the database and so cannot be deleted.");
- }
String query = QueryBuilder.buildDelete(tableMetaData.getTableName(), rowId);
+ // TODO: Replace this with a method that takes a conditions object.
DatabaseConditionsManager.getInstance().updateQuery(query);
rowId = -1;
}
public void insert() throws ConditionsObjectException {
- if (!isNew())
- throw new ConditionsObjectException("Record already exists in database and cannot be inserted.");
- if (isReadOnly())
- throw new ConditionsObjectException("This object is set to read only mode.");
if (fieldValues.size() == 0)
throw new ConditionsObjectException("There are no field values to insert.");
- if (!hasValidCollection())
+ if (collectionId == -1)
throw new ConditionsObjectException("The object's collection ID is not valid.");
- String query = QueryBuilder.buildInsert(getTableMetaData().getTableName(), getCollectionId(), getTableMetaData().getFieldNames(), fieldValues.valuesToArray());
+ // TODO: Replace this with a method that takes a conditions object.
+ String query = QueryBuilder.buildInsert(getTableMetaData().getTableName(), getCollectionId(), getTableMetaData().getFieldNames(), fieldValues.valuesToArray());
System.out.println(query);
List<Integer> keys = DatabaseConditionsManager.getInstance().updateQuery(query);
if (keys.size() != 1) {
@@ -88,6 +70,7 @@
if (isNew()) {
throw new ConditionsObjectException("Record has not been inserted into the database yet.");
}
+ // TODO: Replace this with method that takes a conditions object.
String query = QueryBuilder.buildSelect(getTableMetaData().getTableName(), collectionId, fieldValues.fieldsToArray(), "id ASC");
DatabaseConditionsManager manager = DatabaseConditionsManager.getInstance();
ResultSet resultSet = manager.selectQuery(query);
@@ -107,30 +90,20 @@
}
public void update() throws ConditionsObjectException {
- if (isReadOnly()) {
- throw new ConditionsObjectException("This object is set to read only.", this);
- }
- if (isNew()) {
- throw new ConditionsObjectException("Cannot call update on a new record.", this);
- }
if (fieldValues.size() == 0) {
throw new ConditionsObjectException("No field values to update.", this);
}
+ // TODO: Replace this with method that takes a conditions object.
String query = QueryBuilder.buildUpdate(tableMetaData.getTableName(), rowId, fieldValues.fieldsToArray(), fieldValues.valuesToArray());
DatabaseConditionsManager.getInstance().updateQuery(query);
- setIsDirty(false);
}
public void setFieldValue(String key, Object value) {
fieldValues.put(key, value);
- setIsDirty(true);
}
public void setFieldValues(FieldValueMap fieldValues) {
this.fieldValues = fieldValues;
- if (!isNew()) {
- setIsDirty(true);
- }
}
public <T> T getFieldValue(Class<T> klass, String field) {
@@ -158,22 +131,11 @@
this.collectionId = collectionId;
}
- public void setIsDirty(boolean isDirty) {
- this.isDirty = isDirty;
- }
-
- public void setIsReadOnly() {
- isReadOnly = true;
- }
-
public void setRowId(int rowId) throws ConditionsObjectException {
- if (this.rowId != -1)
+ if (!isNew()) {
throw new ConditionsObjectException("The row ID cannot be reassigned on an existing object.");
+ }
this.rowId = rowId;
- }
-
- boolean hasValidCollection() {
- return collectionId != -1;
}
public String toString() {
@@ -186,6 +148,4 @@
}
return sb.toString();
}
-
-
}
Modified: java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObject.java
=============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObject.java (original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObject.java Tue Nov 25 01:48:21 2014
@@ -4,10 +4,11 @@
/**
* This is an ORM interface for accessing conditions database information by
- * row. It can handle new or existing records. The ID values for new records are
+ * row. It can handle new or existing records. The row ID values for new records are
* -1 which indicates they are not in the database yet.
* @author Jeremy McCormick <[log in to unmask]>
*/
+// TODO: The collection ID should be a regular field in the FieldValueMap.
public interface ConditionsObject {
/**
@@ -50,26 +51,6 @@
void select() throws ConditionsObjectException;
/**
- * Return true if this object is read-only.
- * @return True if object is read-only.
- */
- boolean isReadOnly();
-
- /**
- * Return true if this object is new and hasn't been inserted into the
- * database yet.
- * @return True if object is new.
- */
- boolean isNew();
-
- /**
- * Return true if this object's data has been modified without a database
- * update.
- * @return True if object is dirty.
- */
- boolean isDirty();
-
- /**
* Generic set method for field values. This will set the object to the
* 'dirty' state.
* @param fieldName The name of the field.
@@ -95,7 +76,7 @@
* @param field The field value.
* @return The field value casted to type T.
*/
- public <T> T getFieldValue(Class<T> klass, String field);
+ public <T> T getFieldValue(Class<T> type, String field);
/**
* Get a field value with implicit return type.
@@ -127,10 +108,11 @@
* @throws ConditionsObjectException if already set
*/
public void setRowId(int rowId) throws ConditionsObjectException;
-
+
/**
- * Set the object to read only mode. This cannot be changed back once it is
- * set.
+ * Return true if this object is new, e.g. it does not have a valid row ID.
+ * This means that it does not have a database record in its table.
+ * @return True if record is new.
*/
- void setIsReadOnly();
+ public boolean isNew();
}
Modified: java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java
=============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java (original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/api/ConditionsObjectCollection.java Tue Nov 25 01:48:21 2014
@@ -6,6 +6,7 @@
import java.util.LinkedHashSet;
import java.util.Set;
+import org.hps.conditions.database.DatabaseConditionsManager;
import org.hps.conditions.database.TableMetaData;
public class ConditionsObjectCollection<ObjectType extends ConditionsObject> implements Iterable<ObjectType> {
@@ -13,25 +14,14 @@
protected Set<ObjectType> objects = new LinkedHashSet<ObjectType>();
protected TableMetaData tableMetaData;
protected int collectionId = -1;
- protected boolean isReadOnly;
- protected boolean isDirty;
- protected boolean isNew;
protected ConditionsRecord conditionsRecord;
protected ConditionsObjectCollection() {
}
- public ConditionsObjectCollection(TableMetaData tableMetaData, int collectionId, boolean isReadOnly) {
+ public ConditionsObjectCollection(TableMetaData tableMetaData, int collectionId) {
this.tableMetaData = tableMetaData;
this.collectionId = collectionId;
- this.isReadOnly = isReadOnly;
- if (collectionId == -1) {
- this.isNew = true;
- }
- }
-
- public ConditionsRecord getConditionsRecord() {
- return conditionsRecord;
}
public ObjectType get(int index) {
@@ -70,8 +60,6 @@
if (object.getTableMetaData() == null && tableMetaData != null)
object.setTableMetaData(tableMetaData);
objects.add(object);
- if (!isNew())
- setIsDirty(true);
}
public TableMetaData getTableMetaData() {
@@ -88,82 +76,53 @@
for (ConditionsObject object : objects) {
object.update();
}
- setIsDirty(false);
}
- // TODO: This does not need to loop. It should just call delete on the
- // collection ID value.
+ // TODO: This does not need to loop. It should just call delete on the collection ID value.
public void delete() throws ConditionsObjectException {
- if (isReadOnly()) {
- throw new ConditionsObjectException("Collection is read only.");
- }
+ // TODO: Replace with call to a deleteCollection DatabaseConditionsManager method.
for (ConditionsObject object : objects) {
object.delete();
}
}
- // TODO: This should not loop. It should select all the objects with a
- // matching collection ID from the database.
+ // TODO: This should not loop. It should select all the objects with a matching collection ID
+ // from the database replacing the current contents of the collection (if any).
public void select() throws ConditionsObjectException, SQLException {
+ // TODO: Replace with call to a selectCollection DatabaseConditionsManager method.
for (ConditionsObject object : objects) {
object.select();
}
}
- // TODO: This method needs to get the next collection ID from the conditions
- // manager.
- // TODO: This operation should lock the table.
public void insert() throws ConditionsObjectException, SQLException {
- if (!isNew()) {
- throw new ConditionsObjectException("Collection already exists in the database.");
- }
- for (ConditionsObject object : objects) {
- // if (object.isNew()) {
- object.insert();
- // }
- }
- isNew = false;
- }
-
- public boolean isDirty() {
- return isDirty;
- }
-
- public boolean isReadOnly() {
- return isReadOnly;
- }
-
- void setIsDirty(boolean isDirty) {
- this.isDirty = isDirty;
- }
-
- // TODO: This can probably just check if collection ID is not valid e.g. equals -1.
- public boolean isNew() {
- return isNew;
+ DatabaseConditionsManager.getInstance().insertCollection(this);
}
public void setCollectionId(int collectionId) throws ConditionsObjectException {
if (this.collectionId != -1)
throw new ConditionsObjectException("The collection ID is already set.");
this.collectionId = collectionId;
+ for (ConditionsObject object : this.objects) {
+ object.setCollectionId(this.collectionId);
+ }
}
public void setTableMetaData(TableMetaData tableMetaData) {
this.tableMetaData = tableMetaData;
}
- public void setIsReadOnly(boolean isReadOnly) {
- this.isReadOnly = isReadOnly;
- }
-
- public void setConditionsRecord(ConditionsRecord conditionsRecord) throws ConditionsObjectException {
- if (this.conditionsRecord != null)
- throw new ConditionsObjectException("The ConditionsRecord is already set on this collection.");
- this.conditionsRecord = conditionsRecord;
- }
-
@Override
public Iterator<ObjectType> iterator() {
return objects.iterator();
}
-}
+
+ public String toString() {
+ StringBuffer buffer = new StringBuffer();
+ for (ConditionsObject object : this.getObjects()) {
+ buffer.append(object.toString());
+ buffer.append('\n');
+ }
+ return buffer.toString();
+ }
+}
|