[Openproj-commitlog] openproj_core/src/com/projity/interval ValueObjectForIntervalTable.java, 1.4,
Open Source desktop project management
Brought to you by:
akheirol
From: l <sur...@us...> - 2008-10-19 22:25:47
|
Update of /cvsroot/openproj/openproj_core/src/com/projity/interval In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv12539/src/com/projity/interval Modified Files: ValueObjectForIntervalTable.java ValueObjectForInterval.java Log Message: Index: ValueObjectForIntervalTable.java =================================================================== RCS file: /cvsroot/openproj/openproj_core/src/com/projity/interval/ValueObjectForIntervalTable.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- ValueObjectForIntervalTable.java 17 Oct 2008 00:04:48 -0000 1.4 +++ ValueObjectForIntervalTable.java 19 Oct 2008 22:25:34 -0000 1.5 @@ -1,51 +1,51 @@ /* -The contents of this file are subject to the Common Public Attribution License -Version 1.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.projity.com/license . The License is based on the Mozilla Public -License Version 1.1 but Sections 14 and 15 have been added to cover use of -software over a computer network and provide for limited attribution for the -Original Developer. In addition, Exhibit A has been modified to be consistent +The contents of this file are subject to the Common Public Attribution License +Version 1.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.projity.com/license . The License is based on the Mozilla Public +License Version 1.1 but Sections 14 and 15 have been added to cover use of +software over a computer network and provide for limited attribution for the +Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B. -Software distributed under the License is distributed on an "AS IS" basis, -WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the -specific language governing rights and limitations under the License. The -Original Code is OpenProj. The Original Developer is the Initial Developer and -is Projity, Inc. All portions of the code written by Projity are Copyright (c) +Software distributed under the License is distributed on an "AS IS" basis, +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the +specific language governing rights and limitations under the License. The +Original Code is OpenProj. The Original Developer is the Initial Developer and +is Projity, Inc. All portions of the code written by Projity are Copyright (c) 2006, 2007. All Rights Reserved. Contributors Projity, Inc. -Alternatively, the contents of this file may be used under the terms of the -Projity End-User License Agreeement (the Projity License), in which case the -provisions of the Projity License are applicable instead of those above. If you -wish to allow use of your version of this file only under the terms of the -Projity License and not to allow others to use your version of this file under -the CPAL, indicate your decision by deleting the provisions above and replace -them with the notice and other provisions required by the Projity License. If -you do not delete the provisions above, a recipient may use your version of this +Alternatively, the contents of this file may be used under the terms of the +Projity End-User License Agreeement (the Projity License), in which case the +provisions of the Projity License are applicable instead of those above. If you +wish to allow use of your version of this file only under the terms of the +Projity License and not to allow others to use your version of this file under +the CPAL, indicate your decision by deleting the provisions above and replace +them with the notice and other provisions required by the Projity License. If +you do not delete the provisions above, a recipient may use your version of this file under either the CPAL or the Projity License. -[NOTE: The text of this license may differ slightly from the text of the notices -in Exhibits A and B of the license at http://www.projity.com/license. You should +[NOTE: The text of this license may differ slightly from the text of the notices +in Exhibits A and B of the license at http://www.projity.com/license. You should use the latest text at http://www.projity.com/license for your modifications. You may not remove this license text from the source files.] -Attribution Information: Attribution Copyright Notice: Copyright � 2006, 2007 -Projity, Inc. Attribution Phrase (not exceeding 10 words): Powered by OpenProj, -an open source solution from Projity. Attribution URL: http://www.projity.com -Graphic Image as provided in the Covered Code as file: openproj_logo.png with +Attribution Information: Attribution Copyright Notice: Copyright � 2006, 2007 +Projity, Inc. Attribution Phrase (not exceeding 10 words): Powered by OpenProj, +an open source solution from Projity. Attribution URL: http://www.projity.com +Graphic Image as provided in the Covered Code as file: openproj_logo.png with alternatives listed on http://www.projity.com/logo -Display of Attribution Information is required in Larger Works which are defined -in the CPAL as a work which combines Covered Code or portions thereof with code -not governed by the terms of the CPAL. However, in addition to the other notice -obligations, all copies of the Covered Code in Executable and Source Code form -distributed must, as a form of attribution of the original author, include on -each user interface screen the "OpenProj" logo visible to all users. The -OpenProj logo should be located horizontally aligned with the menu bar and left -justified on the top left of the screen adjacent to the File menu. The logo -must be at least 100 x 25 pixels. When users click on the "OpenProj" logo it -must direct them back to http://www.projity.com. +Display of Attribution Information is required in Larger Works which are defined +in the CPAL as a work which combines Covered Code or portions thereof with code +not governed by the terms of the CPAL. However, in addition to the other notice +obligations, all copies of the Covered Code in Executable and Source Code form +distributed must, as a form of attribution of the original author, include on +each user interface screen the "OpenProj" logo visible to all users. The +OpenProj logo should be located horizontally aligned with the menu bar and left +justified on the top left of the screen adjacent to the File menu. The logo +must be at least 100 x 25 pixels. When users click on the "OpenProj" logo it +must direct them back to http://www.projity.com. */ package com.projity.interval; import java.io.IOException; @@ -80,7 +80,7 @@ return valueObjects; } public ValueObjectForIntervalTable() { - + } public ValueObjectForIntervalTable(String name,ArrayList valueObjects) { //serialization this.name=name; @@ -90,16 +90,19 @@ this.name = name; valueObjects.add(createValueObject(ValueObjectForInterval.NA_TIME)); // put in default one } - + + protected abstract ValueObjectForInterval createValueObject(); + + protected abstract ValueObjectForInterval createValueObject(long date); - + /** * A factory method returning a new value at a given date * @param start * @return * @throws InvalidValueObjectForIntervalException - */ + */ public ValueObjectForInterval newValueObject(long start) throws InvalidValueObjectForIntervalException { ValueObjectForInterval newOne = createValueObject(start); @@ -119,10 +122,10 @@ } return newOne; } - + public ValueObjectForInterval add(long start, double value) { return addInterval(start,NO_VALUE,value); - + } public ValueObjectForInterval addInterval(long start, long finish, double value) { if (start < 0) @@ -132,7 +135,7 @@ ValueObjectForInterval initialEmpty = newValueObject(0); initialEmpty.setPrimaryValue(0.0D); } - + ValueObjectForInterval newOne = newValueObject(start); newOne.setPrimaryValue(value); if (finish != NO_VALUE) { @@ -146,7 +149,7 @@ return null; } } - + public long getEnd() { long end = 0; Iterator i = valueObjects.iterator(); @@ -155,7 +158,7 @@ } return end; } - + /** * Adjust the start date of a value object. Assure that it is in valid range, and adjust previous element's end as well as this one's start * @param newStart @@ -171,12 +174,12 @@ throw new InvalidValueObjectForIntervalException(Messages.getString("ValueObjectForIntervalTable.ThisDateMustBeAfter")); //$NON-NLS-1$ if (newStart >= valueObject.getEnd()) // see if this would disappear throw new InvalidValueObjectForIntervalException(Messages.getString("ValueObjectForIntervalTable.ThisDateMustBeBefore")); //$NON-NLS-1$ - + previous.setEnd(newStart); valueObject.setStart(newStart); } - - + + public long getStart() { long start = DateTime.getMaxDate().getTime(); Iterator i = valueObjects.iterator(); @@ -185,7 +188,7 @@ } return start; } - + /** * Remove an entry from the table * @param interval object @@ -199,16 +202,16 @@ previous.setEnd(removeMe.getEnd()); valueObjects.remove(removeMe); } - - + + private int findActiveIndex(long date) { - ValueObjectForInterval find = createValueObject(date); + ValueObjectForInterval find = createValueObject(date); int index = Collections.binarySearch(valueObjects, find,find); // find it if (index < 0) // binary search is weird. The element before is -index - 2 index = -index-2; // gets index of element before return index; } - + /** * Finds the Rate/Availability which is on or before a date * @param date @@ -217,7 +220,7 @@ public ValueObjectForInterval findActive(long date) { return (ValueObjectForInterval) valueObjects.get(findActiveIndex(date)); } - + public ValueObjectForInterval findCurrent() { return findActive(System.currentTimeMillis()); } @@ -227,7 +230,7 @@ /** * Create a new entry one year later - */ + */ public Object createUnvalidatedObject(NodeModel nodeModel, Object parent) { long baseDate = DateTime.midnightToday(); ValueObjectForInterval last = (ValueObjectForInterval) valueObjects.get(valueObjects.size()-1); // get last one @@ -245,13 +248,13 @@ } } public void addUnvalidatedObject(Object object,NodeModel nodeModel, Object parent) { - + } public NodeModelDataFactory getFactoryToUseForChildOfParent(Object impl) { return this; } - - + + public void rollbackUnvalidated(NodeModel nodeModel, Object object) { // try { remove(object,nodeModel,false,true,true); @@ -281,15 +284,38 @@ s.writeObject(name); s.writeObject(valueObjects); } - - + + public void serializeCompact(ObjectOutputStream s) throws IOException { + s.writeObject(name); + if (valueObjects==null){ + s.writeInt(-1); + return; + } + s.writeInt(valueObjects.size()); + for (Iterator i=valueObjects.iterator();i.hasNext();){ + ValueObjectForInterval interval=(ValueObjectForInterval)i.next(); + interval.serializeCompact(s,this); + } + } + + protected static ValueObjectForIntervalTable deserialize(ObjectInputStream s,ValueObjectForIntervalTable v) throws IOException, ClassNotFoundException { v.name=(String)s.readObject(); v.valueObjects=(ArrayList)s.readObject(); return v; } - - public Object clone(){ + + public void deserializeCompact(ObjectInputStream s) throws IOException, ClassNotFoundException { + name=(String)s.readObject(); + int count=s.readInt(); + for (int i=0;i<count;i++){ + ValueObjectForInterval v=createValueObject(); + v.deserializeCompact(s,this); + valueObjects.add(v); + } + } + + public Object clone(){ try { ValueObjectForIntervalTable v=(ValueObjectForIntervalTable)super.clone(); v.name=(name==null)?null:new String(name); @@ -303,12 +329,12 @@ throw new InternalError(); } } - + public void initAfterCloning(){ for (Iterator i=valueObjects.iterator();i.hasNext();){ ((ValueObjectForInterval)i.next()).setTable(this); } - + } public String toString() { return ToStringBuilder.reflectionToString(this); Index: ValueObjectForInterval.java =================================================================== RCS file: /cvsroot/openproj/openproj_core/src/com/projity/interval/ValueObjectForInterval.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- ValueObjectForInterval.java 17 Oct 2008 00:04:48 -0000 1.2 +++ ValueObjectForInterval.java 19 Oct 2008 22:25:34 -0000 1.3 @@ -1,59 +1,59 @@ /* -The contents of this file are subject to the Common Public Attribution License -Version 1.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.projity.com/license . The License is based on the Mozilla Public -License Version 1.1 but Sections 14 and 15 have been added to cover use of -software over a computer network and provide for limited attribution for the -Original Developer. In addition, Exhibit A has been modified to be consistent +The contents of this file are subject to the Common Public Attribution License +Version 1.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.projity.com/license . The License is based on the Mozilla Public +License Version 1.1 but Sections 14 and 15 have been added to cover use of +software over a computer network and provide for limited attribution for the +Original Developer. In addition, Exhibit A has been modified to be consistent with Exhibit B. -Software distributed under the License is distributed on an "AS IS" basis, -WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the -specific language governing rights and limitations under the License. The -Original Code is OpenProj. The Original Developer is the Initial Developer and -is Projity, Inc. All portions of the code written by Projity are Copyright (c) +Software distributed under the License is distributed on an "AS IS" basis, +WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the +specific language governing rights and limitations under the License. The +Original Code is OpenProj. The Original Developer is the Initial Developer and +is Projity, Inc. All portions of the code written by Projity are Copyright (c) 2006, 2007. All Rights Reserved. Contributors Projity, Inc. -Alternatively, the contents of this file may be used under the terms of the -Projity End-User License Agreeement (the Projity License), in which case the -provisions of the Projity License are applicable instead of those above. If you -wish to allow use of your version of this file only under the terms of the -Projity License and not to allow others to use your version of this file under -the CPAL, indicate your decision by deleting the provisions above and replace -them with the notice and other provisions required by the Projity License. If -you do not delete the provisions above, a recipient may use your version of this +Alternatively, the contents of this file may be used under the terms of the +Projity End-User License Agreeement (the Projity License), in which case the +provisions of the Projity License are applicable instead of those above. If you +wish to allow use of your version of this file only under the terms of the +Projity License and not to allow others to use your version of this file under +the CPAL, indicate your decision by deleting the provisions above and replace +them with the notice and other provisions required by the Projity License. If +you do not delete the provisions above, a recipient may use your version of this file under either the CPAL or the Projity License. -[NOTE: The text of this license may differ slightly from the text of the notices -in Exhibits A and B of the license at http://www.projity.com/license. You should +[NOTE: The text of this license may differ slightly from the text of the notices +in Exhibits A and B of the license at http://www.projity.com/license. You should use the latest text at http://www.projity.com/license for your modifications. You may not remove this license text from the source files.] -Attribution Information: Attribution Copyright Notice: Copyright © 2006, 2007 -Projity, Inc. Attribution Phrase (not exceeding 10 words): Powered by OpenProj, -an open source solution from Projity. Attribution URL: http://www.projity.com -Graphic Image as provided in the Covered Code as file: openproj_logo.png with +Attribution Information: Attribution Copyright Notice: Copyright © 2006, 2007 +Projity, Inc. Attribution Phrase (not exceeding 10 words): Powered by OpenProj, +an open source solution from Projity. Attribution URL: http://www.projity.com +Graphic Image as provided in the Covered Code as file: openproj_logo.png with alternatives listed on http://www.projity.com/logo -Display of Attribution Information is required in Larger Works which are defined -in the CPAL as a work which combines Covered Code or portions thereof with code -not governed by the terms of the CPAL. However, in addition to the other notice -obligations, all copies of the Covered Code in Executable and Source Code form -distributed must, as a form of attribution of the original author, include on -each user interface screen the "OpenProj" logo visible to all users. The -OpenProj logo should be located horizontally aligned with the menu bar and left -justified on the top left of the screen adjacent to the File menu. The logo -must be at least 100 x 25 pixels. When users click on the "OpenProj" logo it -must direct them back to http://www.projity.com. +Display of Attribution Information is required in Larger Works which are defined +in the CPAL as a work which combines Covered Code or portions thereof with code +not governed by the terms of the CPAL. However, in addition to the other notice +obligations, all copies of the Covered Code in Executable and Source Code form +distributed must, as a form of attribution of the original author, include on +each user interface screen the "OpenProj" logo visible to all users. The +OpenProj logo should be located horizontally aligned with the menu bar and left +justified on the top left of the screen adjacent to the File menu. The logo +must be at least 100 x 25 pixels. When users click on the "OpenProj" logo it +must direct them back to http://www.projity.com. */ package com.projity.interval; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Comparator; -import java.util.Date; - -import org.apache.commons.lang.builder.ToStringBuilder; import com.projity.pm.time.MutableHasStartAndEnd; import com.projity.util.DateTime; @@ -68,6 +68,9 @@ long start = NA_TIME; protected long end = DateTime.getMaxDate().getTime(); protected ValueObjectForIntervalTable table; + public ValueObjectForInterval(){ + + } protected ValueObjectForInterval(ValueObjectForIntervalTable table, long start) { this.table = table; this.start = start; @@ -108,9 +111,9 @@ public boolean isFirst() { return start == NA_TIME; } - + public int compare(Object arg0, Object arg1) { - return MathUtils.signum(((ValueObjectForInterval)arg0).start - ((ValueObjectForInterval)arg1).start); + return MathUtils.signum(((ValueObjectForInterval)arg0).start - ((ValueObjectForInterval)arg1).start); } public boolean equals(Object arg0) { return start == ((ValueObjectForInterval)arg0).start; @@ -122,7 +125,7 @@ public int compareTo(Object arg0) { return compare(this,arg0); } - public Object clone(){ + public Object clone(){ try { ValueObjectForInterval v=(ValueObjectForInterval)super.clone(); //v.table=(ValueObjectForIntervalTable)v.clone(); @@ -144,5 +147,29 @@ return "Start: " + DateTime.shortString(getStart()) + " End: " + DateTime.shortString(getEnd()) + " Value:" + getPrimaryValue(); } - + public void serializeCompact(ObjectOutputStream s,ValueObjectForIntervalTable parentTable) throws IOException { + s.writeLong(start); + s.writeLong(end); +// s.writeBoolean(table!=null); +// if (table!=null){ +// table.serializeCompact(s); +// } + s.writeBoolean(false); + } + + public void deserializeCompact(ObjectInputStream s,ValueObjectForIntervalTable parentTable) throws IOException, ClassNotFoundException { + setStart(s.readLong()); + setEnd(s.readLong()); + boolean hasTable=s.readBoolean(); +// if (hasTable){ +// ValueObjectForIntervalTable t=createValueObjectTable(); +// t.deserializeCompact(s); +// setTable(t); +// } + table=parentTable; + } + + protected abstract ValueObjectForIntervalTable createValueObjectTable(); + + } |