Compare commits

..

2 Commits

  1. 1102
      .classpath
  2. 42
      src/de/memtext/baseobjects/ActivatableItem.java
  3. 5
      src/de/memtext/baseobjects/ActivatableItemI.java
  4. 13
      src/de/memtext/baseobjects/ComparableObject.java
  5. 56
      src/de/memtext/baseobjects/DataList.java
  6. 17
      src/de/memtext/baseobjects/DoubleClickMouseListener.java
  7. 83
      src/de/memtext/baseobjects/IdObject.java
  8. 6
      src/de/memtext/baseobjects/IdObjectI.java
  9. 41
      src/de/memtext/baseobjects/NameDecorator.java
  10. 43
      src/de/memtext/baseobjects/NamedIdObject.java
  11. 2
      src/de/memtext/baseobjects/NamedIdObjectI.java
  12. 65
      src/de/memtext/baseobjects/NamedIdObjectWithParent.java
  13. 5
      src/de/memtext/baseobjects/NamedIdObjectWithParentI.java
  14. 84
      src/de/memtext/baseobjects/NamedObject.java
  15. 8
      src/de/memtext/baseobjects/NamedObjectI.java
  16. 42
      src/de/memtext/baseobjects/SearchReplaceTextHolder.java
  17. 106
      src/de/memtext/baseobjects/User.java
  18. 636
      src/de/memtext/baseobjects/coll/ActivatableItemList.java
  19. 230
      src/de/memtext/baseobjects/coll/BaseObjectCollection.java
  20. 169
      src/de/memtext/baseobjects/coll/IdObjectCollection.java
  21. 107
      src/de/memtext/baseobjects/coll/IdObjectList.java
  22. 20
      src/de/memtext/baseobjects/coll/IdObjectSet.java
  23. 35
      src/de/memtext/baseobjects/coll/NamedIdObjectCollection.java
  24. 89
      src/de/memtext/baseobjects/coll/NamedIdObjectList.java
  25. 43
      src/de/memtext/baseobjects/coll/NamedIdObjectSet.java
  26. 95
      src/de/memtext/baseobjects/coll/NamedIdObjectWithParentCollection.java
  27. 89
      src/de/memtext/baseobjects/coll/NamedIdObjectWithParentList.java
  28. 20
      src/de/memtext/baseobjects/coll/NamedIdObjectWithParentSet.java
  29. 147
      src/de/memtext/baseobjects/coll/NamedObjectCollection.java
  30. 89
      src/de/memtext/baseobjects/coll/NamedObjectList.java
  31. 30
      src/de/memtext/baseobjects/coll/NamedObjectSet.java
  32. 153
      src/de/memtext/buttons/ButtonGroupPanel.java
  33. 49
      src/de/memtext/buttons/Standard.java
  34. 3
      src/de/memtext/db/AbstractHsqlStandaloneMgrResources.java
  35. 268
      src/de/memtext/db/AddProc.java
  36. 52
      src/de/memtext/db/Comparison.java
  37. 61
      src/de/memtext/db/ComparisonUnit.java
  38. 177
      src/de/memtext/db/ConnectionCreator.java
  39. 60
      src/de/memtext/db/DB.java
  40. 1717
      src/de/memtext/db/DBAccess.java
  41. 140
      src/de/memtext/db/DBComparison.java
  42. 11
      src/de/memtext/db/DBServletException.java
  43. 127
      src/de/memtext/db/DBTimer.java
  44. 185
      src/de/memtext/db/DataSource.java
  45. 197
      src/de/memtext/db/DataSourceEditPanel.java
  46. 152
      src/de/memtext/db/DbRequest.java
  47. 22
      src/de/memtext/db/DbRequestType.java
  48. 85
      src/de/memtext/db/DbResponse.java
  49. 161
      src/de/memtext/db/DbRmiClient.java
  50. 11
      src/de/memtext/db/DbServerI.java
  51. 191
      src/de/memtext/db/DbServerImpl.java
  52. 242
      src/de/memtext/db/DbUtils.java
  53. 150
      src/de/memtext/db/HsqlProcedures.java
  54. 133
      src/de/memtext/db/HsqlStandaloneMgr.java
  55. 30
      src/de/memtext/db/HsqlStandaloneMgrResources.java
  56. 31
      src/de/memtext/db/HsqlStandaloneMgrResources_de.java
  57. 126
      src/de/memtext/db/Library2.java
  58. 262
      src/de/memtext/db/MemtextPool.java
  59. 197
      src/de/memtext/db/MemtextPools.java
  60. 1
      src/de/memtext/db/NichtAngemeldetException.java
  61. 161
      src/de/memtext/db/ProcedureSql.java
  62. 14
      src/de/memtext/db/PropDescriptor.java
  63. 60
      src/de/memtext/db/PropsReader.java
  64. 169
      src/de/memtext/db/RestrictionCollector.java
  65. 29
      src/de/memtext/db/SampleApp.java
  66. 9
      src/de/memtext/db/SchemaReader.java
  67. 439
      src/de/memtext/db/ValueRandomizer.java
  68. 100
      src/de/memtext/db/dataexchange/MyRequest.java
  69. 12
      src/de/memtext/db/dataexchange/MyServletResponse.java
  70. 59
      src/de/memtext/dlg/AboutDialog.java
  71. 183
      src/de/memtext/dlg/DialogWithExit.java
  72. 14
      src/de/memtext/dlg/EnterDateDlg.java
  73. 95
      src/de/memtext/dlg/ImportDlg.java
  74. 42
      src/de/memtext/dlg/InputDialog.java
  75. 109
      src/de/memtext/dlg/LoginDlg.java
  76. 201
      src/de/memtext/dlg/NodeSelectionDlg.java
  77. 74
      src/de/memtext/dlg/ObjectCheckBoxDlg.java
  78. 110
      src/de/memtext/dlg/OkCancelClearDlg.java
  79. 341
      src/de/memtext/dlg/OkCancelDlg.java
  80. 89
      src/de/memtext/dlg/OkCancelPanel.java
  81. 161
      src/de/memtext/dlg/OkDlg.java
  82. 310
      src/de/memtext/dlg/OkDoneDlg.java
  83. 26
      src/de/memtext/dlg/OkDonePanel.java
  84. 338
      src/de/memtext/dlg/PasswdChangeDlg.java
  85. 122
      src/de/memtext/hbt/AbstractAriel.java
  86. 96
      src/de/memtext/hbt/Checker.java
  87. 293
      src/de/memtext/hbt/NewHeartBeatAriel.java
  88. 7
      src/de/memtext/icons/ArrowDownIcon.java
  89. 7
      src/de/memtext/icons/ArrowRight.java
  90. 7
      src/de/memtext/icons/ArrowUpIcon.java
  91. 184
      src/de/memtext/icons/BasicIcon.java
  92. 10
      src/de/memtext/icons/DoubleArrowDownIcon.java
  93. 12
      src/de/memtext/icons/DoubleArrowDownLineIcon.java
  94. 10
      src/de/memtext/icons/DoubleArrowUpIcon.java
  95. 12
      src/de/memtext/icons/DoubleArrowUpLineIcon.java
  96. 172
      src/de/memtext/icons/MBStandardIcons.java
  97. 28
      src/de/memtext/lang/SingOrPluralWord.java
  98. 43
      src/de/memtext/observ/DocumentListenerObserver.java
  99. 6
      src/de/memtext/observ/MyObservable.java
  100. 171
      src/de/memtext/rights/AllowableHierarchyUtil.java
  101. Some files were not shown because too many files have changed in this diff Show More

1102
.classpath

File diff suppressed because it is too large Load Diff

42
src/de/memtext/baseobjects/ActivatableItem.java

@ -6,30 +6,26 @@ package de.memtext.baseobjects;
* */ * */
public class ActivatableItem implements ActivatableItemI { public class ActivatableItem implements ActivatableItemI {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
private boolean isActive;
/**
*
*/
public ActivatableItem() {
super();
}
private boolean isActive; /* (non-Javadoc)
* @see de.memtext.baseobjects.ActivatableItemI#isActive()
*/
public boolean isActive() {
return isActive;
}
/** /* (non-Javadoc)
* * @see de.memtext.baseobjects.ActivatableItemI#setActive(boolean)
*/ */
public ActivatableItem() { public void setActive(boolean isActive) {
super(); this.isActive=isActive;
} }
/* (non-Javadoc)
* @see de.memtext.baseobjects.ActivatableItemI#isActive()
*/
@Override
public boolean isActive() {
return isActive;
}
/* (non-Javadoc)
* @see de.memtext.baseobjects.ActivatableItemI#setActive(boolean)
*/
@Override
public void setActive(boolean isActive) {
this.isActive = isActive;
}
} }

5
src/de/memtext/baseobjects/ActivatableItemI.java

@ -5,7 +5,6 @@ package de.memtext.baseobjects;
* @author MB * @author MB
* */ * */
public interface ActivatableItemI { public interface ActivatableItemI {
boolean isActive(); boolean isActive();
void setActive(boolean isActive);
void setActive(boolean isActive);
} }

13
src/de/memtext/baseobjects/ComparableObject.java

@ -2,7 +2,6 @@ package de.memtext.baseobjects;
public class ComparableObject extends NamedObject implements Comparable { public class ComparableObject extends NamedObject implements Comparable {
private int sortNr; private int sortNr;
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public ComparableObject(String name, int sortNr) { public ComparableObject(String name, int sortNr) {
@ -10,11 +9,12 @@ public class ComparableObject extends NamedObject implements Comparable {
this.sortNr = sortNr; this.sortNr = sortNr;
} }
@Override
public int compareTo(Object o) { public int compareTo(Object o) {
int result = 0; int result = 0;
if (getSortNr() < ((ComparableObject) o).getSortNr()) result = -1; if (getSortNr() < ((ComparableObject) o).getSortNr())
if (getSortNr() > ((ComparableObject) o).getSortNr()) result = 1; result = -1;
if (getSortNr() > ((ComparableObject) o).getSortNr())
result = 1;
return result; return result;
} }
@ -22,11 +22,12 @@ public class ComparableObject extends NamedObject implements Comparable {
return sortNr; return sortNr;
} }
@Override
public boolean equals(Object o) { public boolean equals(Object o) {
boolean result = false; boolean result = false;
ComparableObject comp = (ComparableObject) o; ComparableObject comp = (ComparableObject) o;
if (this.getName().equals(comp.getName()) && this.getSortNr() == comp.getSortNr()) result = true; if (this.getName().equals(comp.getName())
&& this.getSortNr() == comp.getSortNr())
result = true;
return result; return result;
} }

56
src/de/memtext/baseobjects/DataList.java

@ -19,34 +19,32 @@ import java.util.LinkedList;
public class DataList extends LinkedList { public class DataList extends LinkedList {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
/** /**
* *
*/ */
public DataList() { public DataList() {
super(); super();
} }
/** /**
* @param c * @param c
*/ */
public DataList(Collection c) { public DataList(Collection c) {
super(c); super(c);
} }
/**
/** * If for example a value for column 5 is to be stored, but the data List only
* If for example a value for column 5 is to be stored, but the data List only * contains values for column 1 and 2, for column 3 and 4 null values are stored.
* contains values for column 1 and 2, for column 3 and 4 null values are stored.
*/
*/ public Object set(int index, Object o) {
@Override while (index > this.size() - 1) {
public Object set(int index, Object o) { this.add(null);
while (index > this.size() - 1) { }
this.add(null); Object previous = this.get(index);
} super.set(index, o);
Object previous = this.get(index); return previous;
super.set(index, o); }
return previous;
}
} }

17
src/de/memtext/baseobjects/DoubleClickMouseListener.java

@ -5,16 +5,13 @@ import java.awt.event.MouseEvent;
public abstract class DoubleClickMouseListener extends MouseAdapter { public abstract class DoubleClickMouseListener extends MouseAdapter {
public DoubleClickMouseListener() { public DoubleClickMouseListener() {
super(); super();
} }
public final void mousePressed(MouseEvent e) {
@Override if (e.getClickCount() == 2) doubleClickOccured();
public final void mousePressed(MouseEvent e) { }
if (e.getClickCount() == 2) doubleClickOccured(); protected abstract void doubleClickOccured() ;
}
protected abstract void doubleClickOccured();
} }

83
src/de/memtext/baseobjects/IdObject.java

@ -6,52 +6,45 @@ import java.io.Serializable;
* *
* @author MB * @author MB
* */ * */
public class IdObject implements IdObjectI, Serializable { public class IdObject implements IdObjectI,Serializable {
private Object id; private Object id;
private static final long serialVersionUID = 1;
private static final long serialVersionUID = 1; public IdObject() {
public IdObject() { }
public IdObject(Object id) {
} setId(id);
public IdObject(Object id) { }
setId(id);
/**
} * @return
*/
/** public Object getId() {
* @return return id;
*/ }
@Override
public Object getId() {
return id;
} /**
* @param object
*/
public void setId(Object object) {
/** id = object;
* @param object }
*/
@Override public String toString()
public void setId(Object object) { {
id = object; return "id:"+getId();
} }
/**
@Override * Provides a deep copy
public String toString() { */
return "id:" + getId();
}
/**
* Provides a deep copy
*/
@Override
public Object clone() throws CloneNotSupportedException { public Object clone() throws CloneNotSupportedException {
if (id != null && !(id instanceof String) && !(id instanceof Integer)) if (id!=null&&!(id instanceof String)&&!(id instanceof Integer))
throw new CloneNotSupportedException(" You have to check in IdObject.clone if deep copying is necessary for class " + id.getClass()); throw new CloneNotSupportedException(" You have to check in IdObject.clone if deep copying is necessary for class "+id.getClass());
IdObject cl = new IdObject(this.getId()); IdObject cl=new IdObject(this.getId());
return cl; return cl;
} }
} }

6
src/de/memtext/baseobjects/IdObjectI.java

@ -1,12 +1,10 @@
package de.memtext.baseobjects; package de.memtext.baseobjects;
/** /**
* @see de.memtext.util.TreeUtils for a method creating key list (1,2,4) from nodes * @see de.memtext.util.TreeUtils for a method creating key list (1,2,4) from nodes
*/ */
public interface IdObjectI { public interface IdObjectI {
public Object getId(); public Object getId();
public void setId(Object id);
public void setId(Object id);
} }

41
src/de/memtext/baseobjects/NameDecorator.java

@ -5,29 +5,24 @@ package de.memtext.baseobjects;
* For classes up in the hierarchy which need a name in some context * For classes up in the hierarchy which need a name in some context
* but shouldn't pass it on to inheriting classes * but shouldn't pass it on to inheriting classes
*/ */
public final class NameDecorator implements NamedObjectI { public final class NameDecorator implements NamedObjectI{
private Object object; private Object object;
private String name;
private String name; public NameDecorator(String name,Object object) {
this.name=name;
public NameDecorator(String name, Object object) { this.object=object;
this.name = name; }
this.object = object; public String getName() {
} return name;
}
@Override public void setName(String name) {
public String getName() { this.name=name;
return name; }
}
public Object getObject()
@Override {
public void setName(String name) { return object;
this.name = name; }
}
public Object getObject() {
return object;
}
} }
//Created on 25.11.2003 at 14:49:50 //Created on 25.11.2003 at 14:49:50

43
src/de/memtext/baseobjects/NamedIdObject.java

@ -9,11 +9,10 @@ import de.memtext.util.HashCodeUtil;
* *
* @author MB * @author MB
*/ */
public class NamedIdObject extends NamedObject implements NamedIdObjectI, Serializable { public class NamedIdObject extends NamedObject implements NamedIdObjectI,
Serializable {
private Object id; private Object id;
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public NamedIdObject() { public NamedIdObject() {
} }
@ -29,7 +28,6 @@ public class NamedIdObject extends NamedObject implements NamedIdObjectI, Serial
/** /**
* @return * @return
*/ */
@Override
public Object getId() { public Object getId() {
return id; return id;
} }
@ -37,50 +35,47 @@ public class NamedIdObject extends NamedObject implements NamedIdObjectI, Serial
/** /**
* @param object * @param object
*/ */
@Override
public void setId(Object id) { public void setId(Object id) {
this.id = id; this.id = id;
} }
@Override
public String toString() { public String toString() {
return getId() + " - " + getName(); return getId() + " - " + getName();
} }
public boolean equals(Object o)
{
boolean result=false;
if (o instanceof NamedIdObject)
{
NamedIdObject o2=(NamedIdObject)o;
result=EqualsUtil.areEqual(this.getId(),o2.getId())&&EqualsUtil.areEqual(this.getName(),o2.getName());
@Override
public boolean equals(Object o) {
boolean result = false;
if (o instanceof NamedIdObject) {
NamedIdObject o2 = (NamedIdObject) o;
result = EqualsUtil.areEqual(this.getId(), o2.getId()) && EqualsUtil.areEqual(this.getName(), o2.getName());
}
return result;
} }
return result;
@Override }
public int hashCode() { public int hashCode(){
int result = HashCodeUtil.SEED; int result = HashCodeUtil.SEED;
//collect the contributions of various fields //collect the contributions of various fields
result = HashCodeUtil.hash(result, getId()); result = HashCodeUtil.hash(result, getId());
result = HashCodeUtil.hash(result, getName()); result = HashCodeUtil.hash(result, getName());
return result; return result;
} }
/** /**
* Provides a deep copy * Provides a deep copy
*/ */
@Override
public Object clone() throws CloneNotSupportedException { public Object clone() throws CloneNotSupportedException {
NamedIdObject cl = new NamedIdObject((NamedObject) super.clone()); NamedIdObject cl = new NamedIdObject((NamedObject) super.clone());
if (id != null && !(id instanceof String) && !(id instanceof Integer)) if (id != null && !(id instanceof String) && !(id instanceof Integer))
throw new CloneNotSupportedException(" You have to check in NamedIdObject.clone if deep copying is necessary for class " + id.getClass()); throw new CloneNotSupportedException(
" You have to check in NamedIdObject.clone if deep copying is necessary for class "
+ id.getClass());
if (this.id != null) cl.setId(id); if (this.id != null)
cl.setId(id);
return cl; return cl;
} }

2
src/de/memtext/baseobjects/NamedIdObjectI.java

@ -4,7 +4,7 @@ package de.memtext.baseobjects;
* *
* @author MB * @author MB
* */ * */
public interface NamedIdObjectI extends NamedObjectI, IdObjectI { public interface NamedIdObjectI extends NamedObjectI, IdObjectI{
} }

65
src/de/memtext/baseobjects/NamedIdObjectWithParent.java

@ -6,11 +6,10 @@ import de.memtext.tree.KeyParentEqualException;
import de.memtext.util.EqualsUtil; import de.memtext.util.EqualsUtil;
import de.memtext.util.HashCodeUtil; import de.memtext.util.HashCodeUtil;
public class NamedIdObjectWithParent extends NamedIdObject implements NamedIdObjectWithParentI, Serializable { public class NamedIdObjectWithParent extends NamedIdObject implements
NamedIdObjectWithParentI, Serializable {
private Object parentKey; private Object parentKey;
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public NamedIdObjectWithParent() { public NamedIdObjectWithParent() {
super(); super();
} }
@ -24,31 +23,33 @@ public class NamedIdObjectWithParent extends NamedIdObject implements NamedIdObj
super(id, name); super(id, name);
} }
public NamedIdObjectWithParent(Object id, String name, Object parentKey) throws KeyParentEqualException { public NamedIdObjectWithParent(Object id, String name, Object parentKey)
throws KeyParentEqualException {
super(id, name); super(id, name);
setParentKey(parentKey); setParentKey(parentKey);
} }
@Override
public Object getParentKey() { public Object getParentKey() {
return parentKey; return parentKey;
} }
@Override
public void setParentKey(Object parentKey) throws KeyParentEqualException { public void setParentKey(Object parentKey) throws KeyParentEqualException {
this.parentKey = parentKey; this.parentKey = parentKey;
if ((getId() == null && getParentKey() == null) || (getId() != null && getId().equals(getParentKey()))) throw new KeyParentEqualException((NamedIdObjectWithParentI) this); if ((getId() == null && getParentKey() == null)
|| (getId() != null && getId().equals(getParentKey())))
throw new KeyParentEqualException((NamedIdObjectWithParentI) this);
} }
//TODO aufteilen auf übergeordnete Objekte
//TODO aufteilen auf übergeordnete Objekte
@Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (this == obj) return true; if ( this == obj ) return true;
if (obj == null || obj.getClass() != this.getClass()) return false; if ( obj == null || obj.getClass() != this.getClass() ) return false;
NamedIdObjectWithParent i2 = (NamedIdObjectWithParent) obj; NamedIdObjectWithParent i2=(NamedIdObjectWithParent)obj;
return EqualsUtil.areEqual(this.getId(), i2.getId()) && EqualsUtil.areEqual(this.getName(), i2.getName()) && EqualsUtil.areEqual(this.getParentKey(), i2.getParentKey()); return
EqualsUtil.areEqual(this.getId(), i2.getId()) &&
EqualsUtil.areEqual(this.getName(), i2.getName()) &&
EqualsUtil.areEqual(this.getParentKey(), i2.getParentKey());
} }
@ -56,31 +57,33 @@ public class NamedIdObjectWithParent extends NamedIdObject implements NamedIdObj
/* /*
* @see java.lang.Object#hashCode() * @see java.lang.Object#hashCode()
*/ */
@Override
public int hashCode() { public int hashCode() {
int result = HashCodeUtil.SEED; int result = HashCodeUtil.SEED;
result = HashCodeUtil.hash(result, getId()); result = HashCodeUtil.hash(result, getId());
result = HashCodeUtil.hash(result, getName()); result = HashCodeUtil.hash(result, getName());
result = HashCodeUtil.hash(result, getParentKey()); result = HashCodeUtil.hash(result, getParentKey());
return result; return result ;
} }
/** /**
* Provides a deep copy * Provides a deep copy
*/ */
@Override
public Object clone() throws CloneNotSupportedException { public Object clone() throws CloneNotSupportedException {
NamedIdObjectWithParent cl = new NamedIdObjectWithParent((NamedIdObject) super.clone()); NamedIdObjectWithParent cl = new NamedIdObjectWithParent(
(NamedIdObject) super.clone());
if (parentKey != null && !(parentKey instanceof String) && !(parentKey instanceof Integer))
throw new CloneNotSupportedException(" You have to check in NamedIdObjectWithParent.clone if deep copying is necessary for class " + parentKey.getClass()); if (parentKey != null && !(parentKey instanceof String)
&& !(parentKey instanceof Integer))
if (this.parentKey != null) try { throw new CloneNotSupportedException(
cl.setParentKey(this.parentKey); " You have to check in NamedIdObjectWithParent.clone if deep copying is necessary for class "
} catch (KeyParentEqualException e) { + parentKey.getClass());
throw new CloneNotSupportedException("Cloning didn't work" + e);
} if (this.parentKey != null)
try {
cl.setParentKey(this.parentKey);
} catch (KeyParentEqualException e) {
throw new CloneNotSupportedException("Cloning didn't work" + e);
}
return cl; return cl;
} }
} }

5
src/de/memtext/baseobjects/NamedIdObjectWithParentI.java

@ -3,8 +3,7 @@ package de.memtext.baseobjects;
import de.memtext.tree.KeyParentEqualException; import de.memtext.tree.KeyParentEqualException;
public interface NamedIdObjectWithParentI extends NamedIdObjectI { public interface NamedIdObjectWithParentI extends NamedIdObjectI {
public Object getParentKey(); public Object getParentKey();
public void setParentKey(Object parentKey) throws KeyParentEqualException;
public void setParentKey(Object parentKey) throws KeyParentEqualException;
} }
//Created on 18.11.2003 //Created on 18.11.2003

84
src/de/memtext/baseobjects/NamedObject.java

@ -6,52 +6,44 @@ import java.io.Serializable;
* *
* @author MB * @author MB
* */ * */
public class NamedObject implements NamedObjectI, Serializable { public class NamedObject implements NamedObjectI,Serializable {
private String name; private String name;
private static final long serialVersionUID = 1;
private static final long serialVersionUID = 1; /**
*
/** */
*
*/ public NamedObject() {
public NamedObject() { }
public NamedObject(String name) {
} setName(name);
}
public NamedObject(String name) {
setName(name);
} /**
* @return
*/
/** public String getName() {
* @return return name;
*/ }
@Override
public String getName() {
return name;
} /**
* @param string
*/
public void setName(String string) {
/** name = string;
* @param string }
*/ public String toString() {
@Override return name;
public void setName(String string) { }
name = string;
} /**
* Provides a deep copy
@Override */
public String toString() {
return name;
}
/**
* Provides a deep copy
*/
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
return new NamedObject(this.getName()); return new NamedObject(this.getName());
} }
} }

8
src/de/memtext/baseobjects/NamedObjectI.java

@ -6,10 +6,8 @@ package de.memtext.baseobjects;
* */ * */
public interface NamedObjectI { public interface NamedObjectI {
public String getName(); public String getName();
public void setName(String name); public void setName(String name);
public String toString();
@Override
public String toString();
} }

42
src/de/memtext/baseobjects/SearchReplaceTextHolder.java

@ -1,5 +1,4 @@
package de.memtext.baseobjects; package de.memtext.baseobjects;
/** /**
* This class holds information about a string that is to be * This class holds information about a string that is to be
* searched for and another string that the former is to be * searched for and another string that the former is to be
@ -7,27 +6,26 @@ package de.memtext.baseobjects;
* By default both are empty strings. * By default both are empty strings.
*/ */
public class SearchReplaceTextHolder { public class SearchReplaceTextHolder {
private String searchText = "", replaceText = ""; private String searchText="", replaceText="";
public SearchReplaceTextHolder() {
public SearchReplaceTextHolder() { super();
super(); }
}
public String getReplaceText() {
public String getReplaceText() { return replaceText;
return replaceText; }
}
public String getSearchText() {
public String getSearchText() { return searchText;
return searchText; }
}
public void setReplaceText(String string) {
public void setReplaceText(String string) { replaceText = string;
replaceText = string; }
}
public void setSearchText(String string) {
public void setSearchText(String string) { searchText = string;
searchText = string; }
}
} }

106
src/de/memtext/baseobjects/User.java

@ -13,84 +13,72 @@ import de.memtext.rights.Rights;
* @author MB * @author MB
* */ * */
public class User extends NamedIdObject implements Serializable { public class User extends NamedIdObject implements Serializable {
private List groupMembershipIds = new ArrayList(5); private List groupMembershipIds = new ArrayList(5);
private String passwd;
private String passwd;
private Rights rights;
private Rights rights; private boolean isAdmin=false;
private static final long serialVersionUID = 1;
private boolean isAdmin = false; public User() {
setName("");
private static final long serialVersionUID = 1; setPasswd("");
}
public User() { public User(String username, String passwd) {
setName(""); setName(username);
setPasswd(""); setPasswd(passwd);
}
public User(String username, Integer userid) {
super(userid,username);
if (userid == null)
throw new IllegalArgumentException("No user without userid allowed");
}
public User(String username) {
setName(username);
} }
public User(String username, String passwd) {
setName(username);
setPasswd(passwd);
}
public User(String username, Integer userid) {
super(userid, username);
if (userid == null) throw new IllegalArgumentException("No user without userid allowed");
}
public User(String username) {
setName(username);
}
/** /**
* @param groupmemberships * @param groupmemberships
*/ */
public void addAllGroupmembershipsById(List groupmemberships) { public void addAllGroupmembershipsById(List groupmemberships) {
groupMembershipIds.addAll(groupmemberships); groupMembershipIds.addAll(groupmemberships);
} }
public void addGroupMembershipById(Integer groupid) {
groupMembershipIds.add(groupid);
}
public void addGroupMembershipById(Integer groupid) { public String getPasswd() {
groupMembershipIds.add(groupid); return passwd;
} }
public String getPasswd() {
return passwd;
}
public Iterator groupmembershipIdIterator() {
return groupMembershipIds.iterator();
}
public void removeGroupMembershipById(Integer groupid) {
groupMembershipIds.remove(groupid);
}
public Iterator groupmembershipIdIterator() { public void setPasswd(String pwd) {
return groupMembershipIds.iterator(); passwd = pwd;
} }
public void removeGroupMembershipById(Integer groupid) {
groupMembershipIds.remove(groupid);
}
public void setPasswd(String pwd) {
passwd = pwd;
}
public String toString()
{
@Override return getName();
public String toString() { }
return getName();
}
public Rights getRights() { public Rights getRights() {
return rights; return rights;
} }
public void setRights(Rights rights) { public void setRights(Rights rights) {
this.rights = rights; this.rights = rights;
} }
public boolean isAdmin() { public boolean isAdmin() {
return isAdmin; return isAdmin;
} }
public void setAdmin(boolean isAdmin) { public void setAdmin(boolean isAdmin) {
this.isAdmin = isAdmin; this.isAdmin = isAdmin;
} }

636
src/de/memtext/baseobjects/coll/ActivatableItemList.java

@ -13,335 +13,309 @@ import de.memtext.baseobjects.ActivatableItemI;
* *
* @author MB * @author MB
* */ * */
public class ActivatableItemList implements List, Serializable { public class ActivatableItemList implements List,Serializable {
private List collect = new LinkedList(); private List collect = new LinkedList();
private static final long serialVersionUID = 1;
private static final long serialVersionUID = 1; /**
*
/** */
* public ActivatableItemList() {
*/ super();
public ActivatableItemList() { }
super();
} public Iterator activeItemIterator() {
return getActiveItems().iterator();
public Iterator activeItemIterator() { }
return getActiveItems().iterator();
} public Collection getActiveItems() {
Collection result = new LinkedList();
public Collection getActiveItems() { for (Iterator iter = this.iterator(); iter.hasNext();) {
Collection result = new LinkedList(); ActivatableItemI element = (ActivatableItemI) iter.next();
for (Iterator iter = this.iterator(); iter.hasNext();) { if (element.isActive())
ActivatableItemI element = (ActivatableItemI) iter.next(); result.add(element);
if (element.isActive()) result.add(element); }
} return result;
return result; }
} public void setAllActive(boolean active) {
for (Iterator iter = this.iterator(); iter.hasNext();) {
public void setAllActive(boolean active) { ActivatableItemI element = (ActivatableItemI) iter.next();
for (Iterator iter = this.iterator(); iter.hasNext();) { element.setActive(active);
ActivatableItemI element = (ActivatableItemI) iter.next(); }
element.setActive(active); }
} public boolean isAllActive() {
} boolean result = true;
for (Iterator iter = this.iterator(); iter.hasNext();) {
public boolean isAllActive() { ActivatableItemI element = (ActivatableItemI) iter.next();
boolean result = true; if (!element.isActive()) {
for (Iterator iter = this.iterator(); iter.hasNext();) { result = false;
ActivatableItemI element = (ActivatableItemI) iter.next(); break;
if (!element.isActive()) { }
result = false; }
break; return result;
} }
} public boolean isAllDeactivated() {
return result; boolean result = true;
} for (Iterator iter = this.iterator(); iter.hasNext();) {
ActivatableItemI element = (ActivatableItemI) iter.next();
public boolean isAllDeactivated() { if (element.isActive()) {
boolean result = true; result = false;
for (Iterator iter = this.iterator(); iter.hasNext();) { break;
ActivatableItemI element = (ActivatableItemI) iter.next(); }
if (element.isActive()) { }
result = false; return result;
break; }
} public int activeCount() {
} int count = 0;
return result; for (Iterator iter = this.iterator(); iter.hasNext();) {
} ActivatableItemI element = (ActivatableItemI) iter.next();
if (element.isActive())
public int activeCount() { count++;
int count = 0; }
for (Iterator iter = this.iterator(); iter.hasNext();) { return count;
ActivatableItemI element = (ActivatableItemI) iter.next(); }
if (element.isActive()) count++; public int deactivatedCount() {
}
return count; int count = 0;
} for (Iterator iter = this.iterator(); iter.hasNext();) {
ActivatableItemI element = (ActivatableItemI) iter.next();
public int deactivatedCount() { if (!element.isActive())
count++;
int count = 0; }
for (Iterator iter = this.iterator(); iter.hasNext();) { return count;
ActivatableItemI element = (ActivatableItemI) iter.next();
if (!element.isActive()) count++; }
} public ActivatableItemI getActiveItem(int pos) {
return count; ActivatableItemI result = null;
int i = 0;
}
for (Iterator it = activeItemIterator(); it.hasNext();) {
public ActivatableItemI getActiveItem(int pos) { ActivatableItemI element = (ActivatableItemI) it.next();
ActivatableItemI result = null; if (i == pos) {
int i = 0; result = element;
break;
for (Iterator it = activeItemIterator(); it.hasNext();) { }
ActivatableItemI element = (ActivatableItemI) it.next(); i++;
if (i == pos) { }
result = element; if (result == null)
break; throw new RuntimeException("not found");
}
i++; return result;
} }
if (result == null) throw new RuntimeException("not found"); /**
*
return result; * @return null if all deactivated
} */
public ActivatableItemI getFirstActive() {
/** ActivatableItemI result = null;
* for (Iterator iter = this.iterator(); iter.hasNext();) {
* @return null if all deactivated ActivatableItemI element = (ActivatableItemI) iter.next();
*/ if (element.isActive()) {
public ActivatableItemI getFirstActive() { result = element;
ActivatableItemI result = null; break;
for (Iterator iter = this.iterator(); iter.hasNext();) { }
ActivatableItemI element = (ActivatableItemI) iter.next(); }
if (element.isActive()) { return result;
result = element; }
break; /**
} *
} * @return null if all active
return result; */
} public ActivatableItemI getFirstDeactivated() {
ActivatableItemI result = null;
/** for (Iterator iter = this.iterator(); iter.hasNext();) {
* ActivatableItemI element = (ActivatableItemI) iter.next();
* @return null if all active if (!element.isActive()) {
*/ result = element;
public ActivatableItemI getFirstDeactivated() { break;
ActivatableItemI result = null; }
for (Iterator iter = this.iterator(); iter.hasNext();) { }
ActivatableItemI element = (ActivatableItemI) iter.next(); return result;
if (!element.isActive()) { }
result = element; /* (non-Javadoc)
break; * @see java.util.Collection#size()
} */
} public int size() {
return result; return collect.size();
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see java.util.Collection#size() * @see java.util.Collection#isEmpty()
*/ */
@Override public boolean isEmpty() {
public int size() { return collect.isEmpty();
return collect.size(); }
}
/* (non-Javadoc)
/* (non-Javadoc) * @see java.util.Collection#contains(java.lang.Object)
* @see java.util.Collection#isEmpty() */
*/ public boolean contains(Object o) {
@Override return collect.contains(o);
public boolean isEmpty() { }
return collect.isEmpty();
} /* (non-Javadoc)
* @see java.util.Collection#iterator()
/* (non-Javadoc) */
* @see java.util.Collection#contains(java.lang.Object) public Iterator iterator() {
*/ return collect.iterator();
@Override }
public boolean contains(Object o) {
return collect.contains(o); /* (non-Javadoc)
} * @see java.util.Collection#toArray()
*/
/* (non-Javadoc) public Object[] toArray() {
* @see java.util.Collection#iterator() return collect.toArray();
*/ }
@Override
public Iterator iterator() { /* (non-Javadoc)
return collect.iterator(); * @see java.util.Collection#toArray(java.lang.Object[])
} */
public Object[] toArray(Object[] a) {
/* (non-Javadoc) return collect.toArray(a);
* @see java.util.Collection#toArray() }
*/
@Override /* (non-Javadoc)
public Object[] toArray() { * @see java.util.Collection#containsAll(java.util.Collection)
return collect.toArray(); */
} public boolean containsAll(Collection c) {
return collect.containsAll(c);
/* (non-Javadoc) }
* @see java.util.Collection#toArray(java.lang.Object[])
*/ /* (non-Javadoc)
@Override * @see java.util.Collection#addAll(java.util.Collection)
public Object[] toArray(Object[] a) { */
return collect.toArray(a); public boolean addAll(Collection c) {
} for (Iterator iter = c.iterator(); iter.hasNext();) {
Object element = iter.next();
/* (non-Javadoc) if (!(element instanceof ActivatableItemI))
* @see java.util.Collection#containsAll(java.util.Collection) throw new IllegalArgumentException("only Activatable items");
*/
@Override }
public boolean containsAll(Collection c) { return collect.addAll(c);
return collect.containsAll(c); }
}
/* (non-Javadoc)
/* (non-Javadoc) * @see java.util.Collection#removeAll(java.util.Collection)
* @see java.util.Collection#addAll(java.util.Collection) */
*/ public boolean removeAll(Collection c) {
@Override return collect.removeAll(c);
public boolean addAll(Collection c) { }
for (Iterator iter = c.iterator(); iter.hasNext();) {
Object element = iter.next(); /* (non-Javadoc)
if (!(element instanceof ActivatableItemI)) throw new IllegalArgumentException("only Activatable items"); * @see java.util.Collection#retainAll(java.util.Collection)
*/
} public boolean retainAll(Collection c) {
return collect.addAll(c); for (Iterator iter = c.iterator(); iter.hasNext();) {
} Object element = iter.next();
if (!(element instanceof ActivatableItemI))
/* (non-Javadoc) throw new IllegalArgumentException("only Activatable items");
* @see java.util.Collection#removeAll(java.util.Collection)
*/ }
@Override return collect.retainAll(c);
public boolean removeAll(Collection c) { }
return collect.removeAll(c);
} /* (non-Javadoc)
* @see java.util.Collection#clear()
/* (non-Javadoc) */
* @see java.util.Collection#retainAll(java.util.Collection) public void clear() {
*/ collect.clear();
@Override }
public boolean retainAll(Collection c) {
for (Iterator iter = c.iterator(); iter.hasNext();) { /* (non-Javadoc)
Object element = iter.next(); * @see java.util.Collection#add(java.lang.Object)
if (!(element instanceof ActivatableItemI)) throw new IllegalArgumentException("only Activatable items"); */
public boolean add(Object o) {
} if (!(o instanceof ActivatableItemI))
return collect.retainAll(c); throw new IllegalArgumentException("only Activatable items");
} return collect.add(o);
}
/* (non-Javadoc)
* @see java.util.Collection#clear() /* (non-Javadoc)
*/ * @see java.util.Collection#remove(java.lang.Object)
@Override */
public void clear() { public boolean remove(Object o) {
collect.clear(); return collect.remove(o);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see java.util.Collection#add(java.lang.Object) * @see java.util.List#addAll(int, java.util.Collection)
*/ */
@Override public boolean addAll(int index, Collection c) {
public boolean add(Object o) { for (Iterator iter = c.iterator(); iter.hasNext();) {
if (!(o instanceof ActivatableItemI)) throw new IllegalArgumentException("only Activatable items"); Object element = iter.next();
return collect.add(o); if (!(element instanceof ActivatableItemI))
} throw new IllegalArgumentException("only Activatable items");
/* (non-Javadoc) }
* @see java.util.Collection#remove(java.lang.Object) return collect.addAll(c);
*/ }
@Override
public boolean remove(Object o) { /* (non-Javadoc)
return collect.remove(o); * @see java.util.List#get(int)
} */
public Object get(int index) {
/* (non-Javadoc) return collect.get(index);
* @see java.util.List#addAll(int, java.util.Collection) }
*/
@Override /* (non-Javadoc)
public boolean addAll(int index, Collection c) { * @see java.util.List#set(int, java.lang.Object)
for (Iterator iter = c.iterator(); iter.hasNext();) { */
Object element = iter.next(); public Object set(int index, Object element) {
if (!(element instanceof ActivatableItemI)) throw new IllegalArgumentException("only Activatable items"); if (!(element instanceof ActivatableItemI))
throw new IllegalArgumentException("only Activatable items");
} return collect.set(index, element);
return collect.addAll(c); }
}
/* (non-Javadoc)
/* (non-Javadoc) * @see java.util.List#add(int, java.lang.Object)
* @see java.util.List#get(int) */
*/ public void add(int index, Object element) {
@Override if (!(element instanceof ActivatableItemI))
public Object get(int index) { throw new IllegalArgumentException("only Activatable items");
return collect.get(index); collect.add(index, element);
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see java.util.List#set(int, java.lang.Object) * @see java.util.List#remove(int)
*/ */
@Override public Object remove(int index) {
public Object set(int index, Object element) { return collect.remove(index);
if (!(element instanceof ActivatableItemI)) throw new IllegalArgumentException("only Activatable items"); }
return collect.set(index, element);
} /* (non-Javadoc)
* @see java.util.List#indexOf(java.lang.Object)
/* (non-Javadoc) */
* @see java.util.List#add(int, java.lang.Object) public int indexOf(Object o) {
*/ return collect.indexOf(o);
@Override }
public void add(int index, Object element) {
if (!(element instanceof ActivatableItemI)) throw new IllegalArgumentException("only Activatable items"); /* (non-Javadoc)
collect.add(index, element); * @see java.util.List#lastIndexOf(java.lang.Object)
} */
public int lastIndexOf(Object o) {
/* (non-Javadoc) return collect.lastIndexOf(o);
* @see java.util.List#remove(int) }
*/
@Override /* (non-Javadoc)
public Object remove(int index) { * @see java.util.List#listIterator()
return collect.remove(index); */
} public ListIterator listIterator() {
return collect.listIterator();
/* (non-Javadoc) }
* @see java.util.List#indexOf(java.lang.Object)
*/ /* (non-Javadoc)
@Override * @see java.util.List#listIterator(int)
public int indexOf(Object o) { */
return collect.indexOf(o); public ListIterator listIterator(int index) {
} return collect.listIterator(index);
}
/* (non-Javadoc)
* @see java.util.List#lastIndexOf(java.lang.Object) /* (non-Javadoc)
*/ * @see java.util.List#subList(int, int)
@Override */
public int lastIndexOf(Object o) { public List subList(int fromIndex, int toIndex) {
return collect.lastIndexOf(o); return collect.subList(fromIndex, toIndex);
} }
public String toString() {
/* (non-Javadoc) return "ActivatableItemsList " + size() + " items";
* @see java.util.List#listIterator() }
*/
@Override
public ListIterator listIterator() {
return collect.listIterator();
}
/* (non-Javadoc)
* @see java.util.List#listIterator(int)
*/
@Override
public ListIterator listIterator(int index) {
return collect.listIterator(index);
}
/* (non-Javadoc)
* @see java.util.List#subList(int, int)
*/
@Override
public List subList(int fromIndex, int toIndex) {
return collect.subList(fromIndex, toIndex);
}
@Override
public String toString() {
return "ActivatableItemsList " + size() + " items";
}
} }

230
src/de/memtext/baseobjects/coll/BaseObjectCollection.java

@ -10,130 +10,114 @@ import java.util.LinkedList;
* linkedList, subclasses may change to use a list or set * linkedList, subclasses may change to use a list or set
* @author MB * @author MB
* */ * */
public class BaseObjectCollection implements Collection, Serializable { public class BaseObjectCollection implements Collection,Serializable {
protected Collection collect; protected Collection collect;
private static final long serialVersionUID = 1;
private static final long serialVersionUID = 1; public BaseObjectCollection() {
super();
public BaseObjectCollection() { collect = new LinkedList();
super(); }
collect = new LinkedList();
}
public int size() {
return collect.size();
@Override }
public int size() {
return collect.size(); /* (non-Javadoc)
} * @see java.util.Collection#isEmpty()
*/
/* (non-Javadoc) public boolean isEmpty() {
* @see java.util.Collection#isEmpty() return collect.isEmpty();
*/ }
@Override
public boolean isEmpty() { /* (non-Javadoc)
return collect.isEmpty(); * @see java.util.Collection#contains(java.lang.Object)
} */
public boolean contains(Object o) {
/* (non-Javadoc) return collect.contains(o);
* @see java.util.Collection#contains(java.lang.Object) }
*/
@Override /* (non-Javadoc)
public boolean contains(Object o) { * @see java.util.Collection#iterator()
return collect.contains(o); */
} public Iterator iterator() {
return collect.iterator();
/* (non-Javadoc) }
* @see java.util.Collection#iterator()
*/ /* (non-Javadoc)
@Override * @see java.util.Collection#toArray()
public Iterator iterator() { */
return collect.iterator(); public Object[] toArray() {
} return collect.toArray();
}
/* (non-Javadoc)
* @see java.util.Collection#toArray() /* (non-Javadoc)
*/ * @see java.util.Collection#toArray(java.lang.Object[])
@Override */
public Object[] toArray() { public Object[] toArray(Object[] a) {
return collect.toArray(); return collect.toArray(a);
} }
/* (non-Javadoc)
* @see java.util.Collection#toArray(java.lang.Object[])
*/
@Override /* (non-Javadoc)
public Object[] toArray(Object[] a) { * @see java.util.Collection#containsAll(java.util.Collection)
return collect.toArray(a); */
} public boolean containsAll(Collection c) {
return collect.containsAll(c);
}
/* (non-Javadoc)
/* (non-Javadoc) * @see java.util.Collection#addAll(java.util.Collection)
* @see java.util.Collection#containsAll(java.util.Collection) */
*/ public boolean addAll(Collection c) {
@Override return collect.addAll(c);
public boolean containsAll(Collection c) { }
return collect.containsAll(c);
} /* (non-Javadoc)
* @see java.util.Collection#removeAll(java.util.Collection)
/* (non-Javadoc) */
* @see java.util.Collection#addAll(java.util.Collection) public boolean removeAll(Collection c) {
*/ return collect.removeAll(c);
@Override }
public boolean addAll(Collection c) {
return collect.addAll(c); /* (non-Javadoc)
} * @see java.util.Collection#retainAll(java.util.Collection)
*/
/* (non-Javadoc) public boolean retainAll(Collection c) {
* @see java.util.Collection#removeAll(java.util.Collection) return collect.retainAll(c);
*/ }
@Override
public boolean removeAll(Collection c) { /* (non-Javadoc)
return collect.removeAll(c); * @see java.util.Collection#clear()
} */
public void clear() {
/* (non-Javadoc) collect.clear();
* @see java.util.Collection#retainAll(java.util.Collection) }
*/
@Override /* (non-Javadoc)
public boolean retainAll(Collection c) { * @see java.util.Collection#add(java.lang.Object)
return collect.retainAll(c); */
} public boolean add(Object o) {
if (o==null) throw new IllegalArgumentException("can't add null value");
/* (non-Javadoc) return collect.add(o);
* @see java.util.Collection#clear() }
*/
@Override /* (non-Javadoc)
public void clear() { * @see java.util.Collection#remove(java.lang.Object)
collect.clear(); */
} public boolean remove(Object o) {
return collect.remove(o);
/* (non-Javadoc) }
* @see java.util.Collection#add(java.lang.Object)
*/
@Override /**
public boolean add(Object o) { * Only shallow copy
if (o == null) throw new IllegalArgumentException("can't add null value"); */
return collect.add(o);
}
/* (non-Javadoc)
* @see java.util.Collection#remove(java.lang.Object)
*/
@Override
public boolean remove(Object o) {
return collect.remove(o);
}
/**
* Only shallow copy
*/
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
BaseObjectCollection c = new BaseObjectCollection(); BaseObjectCollection c=new BaseObjectCollection();
c.addAll(this); c.addAll(this);
return c; return c;
} }

169
src/de/memtext/baseobjects/coll/IdObjectCollection.java

@ -11,95 +11,96 @@ import de.memtext.util.StringUtils;
* *
* @author MB * @author MB
* */ * */
public class IdObjectCollection extends BaseObjectCollection implements Collection, Serializable { public class IdObjectCollection
extends BaseObjectCollection
implements Collection ,Serializable{
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public IdObjectCollection() {
super();
}
/**
*
* @param id
* @return object
* @throws IllegalArgumentException if nothing found
*/
public IdObjectI getById(Object id) {
IdObjectI test, result = null;
for (Iterator it = collect.iterator(); it.hasNext();) {
test = (IdObjectI) it.next();
if ((id == null && test.getId() == null)
|| (test.getId() != null && test.getId().equals(id))) {
result = test;
break;
}
}
if (result == null)
throw new IllegalArgumentException(
"No element with id " + id + " found!");
return result;
}
/**
* like '12','34','343'
* useful for creating sqls like where x in (...)
* @return
*/
public String getIdsApostropheString() {
StringBuffer result = new StringBuffer();
IdObjectI test;
for (Iterator it = collect.iterator(); it.hasNext();) {
test = (IdObjectI) it.next();
result.append("'" + test.getId() + "',");
}
StringUtils.deleteLastChar(result);
return result.toString();
}
public boolean containsItemWithId(Object id) {
boolean result = false;
IdObjectI test;
for (Iterator it = collect.iterator(); it.hasNext();) {
test = (IdObjectI) it.next();
if (test.getId().equals(id)) {
result = true;
break;
}
}
return result;
}
/**
* Checks if the collection contains only the ids given in the param collection ids
* @param Collection ids
* @return
*/
public boolean consistsOfIds(Collection ids) {
public IdObjectCollection() { if (this.size() != ids.size())
super(); return false;
} boolean result = true;
for (Iterator it = ids.iterator(); it.hasNext();) {
/** Object id = it.next();
* try {
* @param id Object dummy = getById(id);
* @return object } catch (IllegalArgumentException e) {
* @throws IllegalArgumentException if nothing found result = false;
*/ break;
public IdObjectI getById(Object id) { }
IdObjectI test, result = null; }
for (Iterator it = collect.iterator(); it.hasNext();) { return result;
test = (IdObjectI) it.next(); }
if ((id == null && test.getId() == null) || (test.getId() != null && test.getId().equals(id))) {
result = test;
break;
}
}
if (result == null) throw new IllegalArgumentException("No element with id " + id + " found!");
return result;
}
/** public boolean add(Object o) {
* like '12','34','343' if (o == null)
* useful for creating sqls like where x in (...) throw new IllegalArgumentException("can't add null value");
* @return if (!(o instanceof IdObjectI))
*/ throw new IllegalArgumentException("only named IdObjects allowed");
public String getIdsApostropheString() { return collect.add(o);
StringBuffer result = new StringBuffer(); }
IdObjectI test;
for (Iterator it = collect.iterator(); it.hasNext();) {
test = (IdObjectI) it.next();
result.append("'" + test.getId() + "',");
}
StringUtils.deleteLastChar(result);
return result.toString();
}
public boolean containsItemWithId(Object id) {
boolean result = false;
IdObjectI test;
for (Iterator it = collect.iterator(); it.hasNext();) {
test = (IdObjectI) it.next();
if (test.getId().equals(id)) {
result = true;
break;
}
}
return result;
}
/**
* Checks if the collection contains only the ids given in the param collection ids
* @param Collection ids
* @return
*/
public boolean consistsOfIds(Collection ids) {
if (this.size() != ids.size()) return false;
boolean result = true;
for (Iterator it = ids.iterator(); it.hasNext();) {
Object id = it.next();
try {
Object dummy = getById(id);
} catch (IllegalArgumentException e) {
result = false;
break;
}
}
return result;
}
@Override
public boolean add(Object o) {
if (o == null) throw new IllegalArgumentException("can't add null value");
if (!(o instanceof IdObjectI)) throw new IllegalArgumentException("only named IdObjects allowed");
return collect.add(o);
}
/** /**
* Only shallow copy * Only shallow copy
*/ */
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
IdObjectCollection c = new IdObjectCollection(); IdObjectCollection c=new IdObjectCollection();
c.addAll(this); c.addAll(this);
return c; return c;
} }

107
src/de/memtext/baseobjects/coll/IdObjectList.java

@ -15,81 +15,68 @@ import de.memtext.util.StringUtils;
* */ * */
public class IdObjectList extends IdObjectCollection implements List { public class IdObjectList extends IdObjectCollection implements List {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public IdObjectList() {
super();
collect=new LinkedList();
}
public IdObjectList() {
super();
collect = new LinkedList();
}
public Object get(int pos)
{
return ((List)collect).get(pos);
}
@Override public boolean addAll(int arg0, Collection arg1) {
public Object get(int pos) { return ((List)collect).addAll(arg0,arg1);
return ((List) collect).get(pos); }
}
@Override public Object set(int arg0, Object arg1) {
public boolean addAll(int arg0, Collection arg1) { return ((List)collect).set(arg0,arg1);
return ((List) collect).addAll(arg0, arg1); }
}
@Override public void add(int pos, Object arg1) {
public Object set(int arg0, Object arg1) { ((List)collect).add(pos,arg1);
return ((List) collect).set(arg0, arg1); }
}
@Override public Object remove(int arg0) {
public void add(int pos, Object arg1) { return ((List)collect).remove(arg0);
((List) collect).add(pos, arg1); }
}
@Override
public Object remove(int arg0) {
return ((List) collect).remove(arg0);
}
public ListIterator listIterator(int arg0) {
return ((List)collect).listIterator(arg0);
}
@Override public List subList(int arg0, int arg1) {
public ListIterator listIterator(int arg0) { return ((List)collect).subList(arg0,arg1);
return ((List) collect).listIterator(arg0); }
}
@Override public int indexOf(Object arg0) {
public List subList(int arg0, int arg1) { return ((List)collect).indexOf(arg0);
return ((List) collect).subList(arg0, arg1); }
}
@Override public int lastIndexOf(Object arg0) {
public int indexOf(Object arg0) { return ((List)collect).lastIndexOf(arg0);
return ((List) collect).indexOf(arg0); }
}
@Override
public int lastIndexOf(Object arg0) {
return ((List) collect).lastIndexOf(arg0);
}
@Override public ListIterator listIterator() {
public ListIterator listIterator() { return ((List)collect).listIterator();
return ((List) collect).listIterator(); }
} public String toString()
{
@Override StringBuffer result=new StringBuffer("idobject list:");
public String toString() { for (Iterator it = this.iterator(); it.hasNext();) {
StringBuffer result = new StringBuffer("idobject list:");
for (Iterator it = this.iterator(); it.hasNext();) {
IdObjectI element = (IdObjectI) it.next(); IdObjectI element = (IdObjectI) it.next();
result.append(element.toString() + ","); result.append(element.toString()+",");
} }
StringUtils.getLastChar(result); StringUtils.getLastChar(result);
return result.toString(); return result.toString();
} }
/**
/** * Only shallow copy
* Only shallow copy */
*/
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
IdObjectList c = new IdObjectList(); IdObjectList c=new IdObjectList();
c.addAll(this); c.addAll(this);
return c; return c;
} }

20
src/de/memtext/baseobjects/coll/IdObjectSet.java

@ -3,21 +3,19 @@ package de.memtext.baseobjects.coll;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
public class IdObjectSet extends IdObjectCollection implements Set { public class IdObjectSet extends IdObjectCollection implements Set {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public IdObjectSet() {
public IdObjectSet() { super();
super(); collect=new HashSet();
collect = new HashSet(); }
}
/** /**
* Only shallow copy * Only shallow copy
*/ */
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
IdObjectSet c = new IdObjectSet(); IdObjectSet c=new IdObjectSet();
c.addAll(this); c.addAll(this);
return c; return c;
} }

35
src/de/memtext/baseobjects/coll/NamedIdObjectCollection.java

@ -4,6 +4,7 @@ import java.io.Serializable;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import de.memtext.baseobjects.NamedIdObject;
import de.memtext.baseobjects.NamedIdObjectI; import de.memtext.baseobjects.NamedIdObjectI;
import de.memtext.util.EqualsUtil; import de.memtext.util.EqualsUtil;
import de.memtext.util.StringUtils; import de.memtext.util.StringUtils;
@ -12,9 +13,9 @@ import de.memtext.util.StringUtils;
* *
* @author MB * @author MB
*/ */
public class NamedIdObjectCollection extends NamedObjectCollection implements Collection, Serializable { public class NamedIdObjectCollection extends NamedObjectCollection implements
Collection, Serializable {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public NamedIdObjectCollection() { public NamedIdObjectCollection() {
super(); super();
} }
@ -30,12 +31,15 @@ public class NamedIdObjectCollection extends NamedObjectCollection implements Co
NamedIdObjectI test, result = null; NamedIdObjectI test, result = null;
for (Iterator it = collect.iterator(); it.hasNext();) { for (Iterator it = collect.iterator(); it.hasNext();) {
test = (NamedIdObjectI) it.next(); test = (NamedIdObjectI) it.next();
if ((id == null && test.getId() == null) || (test.getId() != null && test.getId().equals(id))) { if ((id == null && test.getId() == null)
|| (test.getId() != null && test.getId().equals(id))) {
result = test; result = test;
break; break;
} }
} }
if (result == null) throw new IllegalArgumentException("No element with id " + id + " found!"); if (result == null)
throw new IllegalArgumentException("No element with id " + id
+ " found!");
return result; return result;
} }
@ -55,7 +59,6 @@ public class NamedIdObjectCollection extends NamedObjectCollection implements Co
return result.toString(); return result.toString();
} }
@Override
public boolean containsItemWithName(String name) { public boolean containsItemWithName(String name) {
boolean result = false; boolean result = false;
NamedIdObjectI test; NamedIdObjectI test;
@ -74,7 +77,7 @@ public class NamedIdObjectCollection extends NamedObjectCollection implements Co
NamedIdObjectI test; NamedIdObjectI test;
for (Iterator it = collect.iterator(); it.hasNext();) { for (Iterator it = collect.iterator(); it.hasNext();) {
test = (NamedIdObjectI) it.next(); test = (NamedIdObjectI) it.next();
if (EqualsUtil.areEqual(test.getId(), id)) { if (EqualsUtil.areEqual(test.getId(),id)) {
result = true; result = true;
break; break;
} }
@ -92,7 +95,8 @@ public class NamedIdObjectCollection extends NamedObjectCollection implements Co
*/ */
public boolean consistsOfIds(Collection ids) { public boolean consistsOfIds(Collection ids) {
if (this.size() != ids.size()) return false; if (this.size() != ids.size())
return false;
boolean result = true; boolean result = true;
for (Iterator it = ids.iterator(); it.hasNext();) { for (Iterator it = ids.iterator(); it.hasNext();) {
Object id = it.next(); Object id = it.next();
@ -106,14 +110,14 @@ public class NamedIdObjectCollection extends NamedObjectCollection implements Co
return result; return result;
} }
@Override
public boolean add(Object o) { public boolean add(Object o) {
if (o == null) throw new IllegalArgumentException("can't add null value"); if (o == null)
if (!(o instanceof NamedIdObjectI)) throw new IllegalArgumentException("only named IdObjects allowed"); throw new IllegalArgumentException("can't add null value");
return collect.add(o); if (!(o instanceof NamedIdObjectI))
throw new IllegalArgumentException("only named IdObjects allowed");
return collect.add(o);
} }
@Override
public String toString() { public String toString() {
StringBuffer result = new StringBuffer(size() + " NamedIdObjects: "); StringBuffer result = new StringBuffer(size() + " NamedIdObjects: ");
for (Iterator it = this.iterator(); it.hasNext();) { for (Iterator it = this.iterator(); it.hasNext();) {
@ -124,11 +128,10 @@ public class NamedIdObjectCollection extends NamedObjectCollection implements Co
} }
/** /**
* Only shallow copy * Only shallow copy
*/ */
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
NamedIdObjectCollection c = new NamedIdObjectCollection(); NamedIdObjectCollection c=new NamedIdObjectCollection();
c.addAll(this); c.addAll(this);
return c; return c;
} }

89
src/de/memtext/baseobjects/coll/NamedIdObjectList.java

@ -11,70 +11,59 @@ import java.util.ListIterator;
* */ * */
public class NamedIdObjectList extends NamedIdObjectCollection implements List { public class NamedIdObjectList extends NamedIdObjectCollection implements List {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public NamedIdObjectList() {
public NamedIdObjectList() { super();
super(); collect=new LinkedList();
collect = new LinkedList(); }
}
@Override public Object get(int pos)
public Object get(int pos) { {
return ((List) collect).get(pos); return ((List)collect).get(pos);
} }
@Override public boolean addAll(int arg0, Collection arg1) {
public boolean addAll(int arg0, Collection arg1) { return ((List)collect).addAll(arg0,arg1);
return ((List) collect).addAll(arg0, arg1); }
}
@Override public Object set(int arg0, Object arg1) {
public Object set(int arg0, Object arg1) { return ((List)collect).set(arg0,arg1);
return ((List) collect).set(arg0, arg1); }
}
@Override public void add(int pos, Object arg1) {
public void add(int pos, Object arg1) { ((List)collect).add(pos,arg1);
((List) collect).add(pos, arg1); }
}
@Override public Object remove(int arg0) {
public Object remove(int arg0) { return ((List)collect).remove(arg0);
return ((List) collect).remove(arg0); }
}
@Override public ListIterator listIterator(int arg0) {
public ListIterator listIterator(int arg0) { return ((List)collect).listIterator(arg0);
return ((List) collect).listIterator(arg0); }
}
@Override public List subList(int arg0, int arg1) {
public List subList(int arg0, int arg1) { return ((List)collect).subList(arg0,arg1);
return ((List) collect).subList(arg0, arg1); }
}
@Override public int indexOf(Object arg0) {
public int indexOf(Object arg0) { return ((List)collect).indexOf(arg0);
return ((List) collect).indexOf(arg0); }
}
@Override public int lastIndexOf(Object arg0) {
public int lastIndexOf(Object arg0) { return ((List)collect).lastIndexOf(arg0);
return ((List) collect).lastIndexOf(arg0); }
}
@Override public ListIterator listIterator() {
public ListIterator listIterator() { return ((List)collect).listIterator();
return ((List) collect).listIterator(); }
}
/** /**
* Only shallow copy * Only shallow copy
*/ */
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
NamedIdObjectList c = new NamedIdObjectList(); NamedIdObjectList c=new NamedIdObjectList();
c.addAll(this); c.addAll(this);
return c; return c;
} }

43
src/de/memtext/baseobjects/coll/NamedIdObjectSet.java

@ -3,33 +3,30 @@ package de.memtext.baseobjects.coll;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
public class NamedIdObjectSet extends NamedIdObjectCollection implements Set { public class NamedIdObjectSet extends NamedIdObjectCollection implements Set {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
/**
/** * Default uses a HashSet internally;
* Default uses a HashSet internally; *
* */
*/
public NamedIdObjectSet() { public NamedIdObjectSet() {
super(); super();
collect = new HashSet(); collect=new HashSet();
} }
/**
/** *
* * @param set the implementation of Set interface to use internally
* @param set the implementation of Set interface to use internally */
*/ public NamedIdObjectSet(Set set) {
public NamedIdObjectSet(Set set) { super();
super(); collect=set;
collect = set; }
}
/** /**
* Only shallow copy * Only shallow copy
*/ */
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
NamedIdObjectSet c = new NamedIdObjectSet(); NamedIdObjectSet c=new NamedIdObjectSet();
c.addAll(this); c.addAll(this);
return c; return c;
} }

95
src/de/memtext/baseobjects/coll/NamedIdObjectWithParentCollection.java

@ -3,70 +3,77 @@ package de.memtext.baseobjects.coll;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import de.memtext.baseobjects.NamedIdObject;
import de.memtext.baseobjects.NamedIdObjectI;
import de.memtext.baseobjects.NamedIdObjectWithParent;
import de.memtext.baseobjects.NamedIdObjectWithParentI; import de.memtext.baseobjects.NamedIdObjectWithParentI;
import de.memtext.util.EqualsUtil; import de.memtext.util.EqualsUtil;
public class NamedIdObjectWithParentCollection extends NamedIdObjectCollection implements Collection { public class NamedIdObjectWithParentCollection
extends NamedIdObjectCollection
implements Collection {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public NamedIdObjectWithParentCollection() {
super();
}
public NamedIdObjectWithParentCollection() { public boolean containsItemWithParent(Object parent) {
super();
}
public boolean containsItemWithParent(Object parent) {
boolean result = false; boolean result = false;
NamedIdObjectWithParentI test; NamedIdObjectWithParentI test;
for (Iterator it = collect.iterator(); it.hasNext();) { for (Iterator it = collect.iterator(); it.hasNext();) {
test = (NamedIdObjectWithParentI) it.next(); test = (NamedIdObjectWithParentI) it.next();
if (EqualsUtil.areEqual(test.getParentKey(), parent)) { if (EqualsUtil.areEqual(test.getParentKey(),parent)) {
result = true; result = true;
break; break;
} }
} }
return result; return result;
} }
/**
* get a collection with all objects in the collection that have a
* given parentKey
* @param parentKey
* @return collection if concrete object is a NamedIdObjectWithParentList also
* returns a NamedIdObjectWithParentList, same for NamedIdObjectWithParentSet
* makes casting possible
*/
public NamedIdObjectWithParentCollection getByParent(Object parentKey) {
NamedIdObjectWithParentCollection result =
new NamedIdObjectWithParentCollection();
if (this instanceof NamedIdObjectWithParentList)
result = new NamedIdObjectWithParentList();
if (this instanceof NamedIdObjectWithParentSet)
result = new NamedIdObjectWithParentSet();
/** for (Iterator it = this.iterator(); it.hasNext();) {
* get a collection with all objects in the collection that have a NamedIdObjectWithParentI element =
* given parentKey (NamedIdObjectWithParentI) it.next();
* @param parentKey if (EqualsUtil.areEqual(element.getParentKey(),parentKey))
* @return collection if concrete object is a NamedIdObjectWithParentList also result.add(element);
* returns a NamedIdObjectWithParentList, same for NamedIdObjectWithParentSet }
* makes casting possible return result;
*/ }
public NamedIdObjectWithParentCollection getByParent(Object parentKey) {
NamedIdObjectWithParentCollection result = new NamedIdObjectWithParentCollection();
if (this instanceof NamedIdObjectWithParentList) result = new NamedIdObjectWithParentList();
if (this instanceof NamedIdObjectWithParentSet) result = new NamedIdObjectWithParentSet();
for (Iterator it = this.iterator(); it.hasNext();) {
NamedIdObjectWithParentI element = (NamedIdObjectWithParentI) it.next();
if (EqualsUtil.areEqual(element.getParentKey(), parentKey)) result.add(element);
}
return result;
}
public int countItemsWithParent(Object parent) {
return getByParent(parent).size();
} public int countItemsWithParent(Object parent)
{
return getByParent(parent).size();
@Override }
public String toString() { public String toString()
StringBuffer result = new StringBuffer(size() + " NamedIdObjectsWithParent: "); {
for (Iterator it = this.iterator(); it.hasNext();) { StringBuffer result=new StringBuffer(size()+" NamedIdObjectsWithParent: ");
NamedIdObjectWithParentI element = (NamedIdObjectWithParentI) it.next(); for (Iterator it = this.iterator(); it.hasNext();) {
result.append(element + " - "); NamedIdObjectWithParentI element = (NamedIdObjectWithParentI) it.next();
} result.append(element+" - ");
return result.toString(); }
} return result.toString();
}
/** /**
* Only shallow copy * Only shallow copy
*/ */
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
NamedIdObjectWithParentCollection c = new NamedIdObjectWithParentCollection(); NamedIdObjectWithParentCollection c=new NamedIdObjectWithParentCollection();
c.addAll(this); c.addAll(this);
return c; return c;
} }

89
src/de/memtext/baseobjects/coll/NamedIdObjectWithParentList.java

@ -7,67 +7,56 @@ import java.util.ListIterator;
public class NamedIdObjectWithParentList extends NamedIdObjectWithParentCollection implements List { public class NamedIdObjectWithParentList extends NamedIdObjectWithParentCollection implements List {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public NamedIdObjectWithParentList() {
super();
collect=new LinkedList();
}
public Object get(int pos)
{
return ((List)collect).get(pos);
}
public NamedIdObjectWithParentList() { public boolean addAll(int arg0, Collection arg1) {
super(); return ((List)collect).addAll(arg0,arg1);
collect = new LinkedList(); }
}
@Override
public Object get(int pos) {
return ((List) collect).get(pos);
}
@Override
public boolean addAll(int arg0, Collection arg1) {
return ((List) collect).addAll(arg0, arg1);
}
@Override public Object set(int arg0, Object arg1) {
public Object set(int arg0, Object arg1) { return ((List)collect).set(arg0,arg1);
return ((List) collect).set(arg0, arg1); }
}
@Override public void add(int pos, Object arg1) {
public void add(int pos, Object arg1) { ((List)collect).add(pos,arg1);
((List) collect).add(pos, arg1); }
}
@Override public Object remove(int arg0) {
public Object remove(int arg0) { return ((List)collect).remove(arg0);
return ((List) collect).remove(arg0); }
}
@Override
public ListIterator listIterator(int arg0) {
return ((List) collect).listIterator(arg0);
}
@Override public ListIterator listIterator(int arg0) {
public List subList(int arg0, int arg1) { return ((List)collect).listIterator(arg0);
return ((List) collect).subList(arg0, arg1); }
}
@Override public List subList(int arg0, int arg1) {
public int indexOf(Object arg0) { return ((List)collect).subList(arg0,arg1);
return ((List) collect).indexOf(arg0); }
}
@Override public int indexOf(Object arg0) {
public int lastIndexOf(Object arg0) { return ((List)collect).indexOf(arg0);
return ((List) collect).lastIndexOf(arg0); }
}
@Override public int lastIndexOf(Object arg0) {
public ListIterator listIterator() { return ((List)collect).lastIndexOf(arg0);
return ((List) collect).listIterator(); }
}
/** public ListIterator listIterator() {
* Only shallow copy return ((List)collect).listIterator();
*/ }
@Override /**
* Only shallow copy
*/
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
NamedIdObjectWithParentList c = new NamedIdObjectWithParentList(); NamedIdObjectWithParentList c=new NamedIdObjectWithParentList();
c.addAll(this); c.addAll(this);
return c; return c;
} }

20
src/de/memtext/baseobjects/coll/NamedIdObjectWithParentSet.java

@ -3,21 +3,19 @@ package de.memtext.baseobjects.coll;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
public class NamedIdObjectWithParentSet extends NamedIdObjectWithParentCollection implements Set { public class NamedIdObjectWithParentSet extends NamedIdObjectWithParentCollection implements Set {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public NamedIdObjectWithParentSet() {
public NamedIdObjectWithParentSet() { super();
super(); collect=new HashSet();
collect = new HashSet(); }
}
/** /**
* Only shallow copy * Only shallow copy
*/ */
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
NamedIdObjectWithParentCollection c = new NamedIdObjectWithParentSet(); NamedIdObjectWithParentCollection c=new NamedIdObjectWithParentSet();
c.addAll(this); c.addAll(this);
return c; return c;
} }

147
src/de/memtext/baseobjects/coll/NamedObjectCollection.java

@ -12,87 +12,90 @@ import de.memtext.util.StringUtils;
* *
* @author MB * @author MB
* */ * */
public class NamedObjectCollection extends BaseObjectCollection implements Collection, Serializable { public class NamedObjectCollection
extends BaseObjectCollection
implements Collection,Serializable {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public NamedObjectCollection() { public NamedObjectCollection() {
super(); super();
} }
/**
* Tries to find an element with the given name
* @param name
* @return first element with given name
* @throws IllegalArgumentException if nothing found
*/
public NamedObjectI getByName(String name) {
NamedObjectI test, result = null;
for (Iterator it = collect.iterator(); it.hasNext();) {
test = (NamedObjectI) it.next();
if (test.getName().equals(name)) {
result = test;
break;
}
}
if (result == null) throw new IllegalArgumentException("No element with name " + name + " found.");
return result;
}
/**
* like '12','34','343'
* useful for creating sqls like where x in (...)
* @return '' if collection is empty
*/
public String getNamesApostropheString() { /**
StringBuffer result = new StringBuffer(); * Tries to find an element with the given name
NamedObjectI test; * @param name
for (Iterator it = collect.iterator(); it.hasNext();) { * @return first element with given name
test = (NamedObjectI) it.next(); * @throws IllegalArgumentException if nothing found
result.append("'" + test.getName() + "',"); */public NamedObjectI getByName(String name) {
} NamedObjectI test, result = null;
StringUtils.deleteLastChar(result); for (Iterator it = collect.iterator(); it.hasNext();) {
if (result.length() == 0) result.append("''"); test = (NamedObjectI) it.next();
return result.toString(); if (test.getName().equals(name)) {
} result = test;
break;
}
}
if (result == null)
throw new IllegalArgumentException(
"No element with name " + name + " found.");
return result;
}
/**
* like '12','34','343'
* useful for creating sqls like where x in (...)
* @return '' if collection is empty
*/
public boolean containsItemWithName(String name) { public String getNamesApostropheString() {
boolean result = false; StringBuffer result = new StringBuffer();
NamedObjectI test; NamedObjectI test;
for (Iterator it = collect.iterator(); it.hasNext();) { for (Iterator it = collect.iterator(); it.hasNext();) {
test = (NamedObjectI) it.next(); test = (NamedObjectI) it.next();
if (EqualsUtil.areEqual(test.getName(), name)) { result.append("'" + test.getName() + "',");
result = true; }
break; StringUtils.deleteLastChar(result);
} if (result.length() == 0)
} result.append("''");
return result; return result.toString();
} }
@Override public boolean containsItemWithName(String name) {
public boolean add(Object o) { boolean result = false;
if (o == null) throw new IllegalArgumentException("can't add null value"); NamedObjectI test;
if (!(o instanceof NamedObjectI)) throw new IllegalArgumentException("only named Objects allowed"); for (Iterator it = collect.iterator(); it.hasNext();) {
return collect.add(o); test = (NamedObjectI) it.next();
} if (EqualsUtil.areEqual(test.getName(),name))
{
result = true;
break;
}
}
return result;
}
@Override public boolean add(Object o) {
public String toString() { if (o == null)
StringBuffer result = new StringBuffer(size() + " NamedObjects: "); throw new IllegalArgumentException("can't add null value");
for (Iterator it = this.iterator(); it.hasNext();) { if (!(o instanceof NamedObjectI))
NamedObjectI element = (NamedObjectI) it.next(); throw new IllegalArgumentException("only named Objects allowed");
result.append(element + " - "); return collect.add(o);
} }
return result.toString(); public String toString()
} {
StringBuffer result=new StringBuffer(size()+" NamedObjects: ");
for (Iterator it = this.iterator(); it.hasNext();) {
NamedObjectI element = (NamedObjectI) it.next();
result.append(element+" - ");
}
return result.toString();
}
/** /**
* Only shallow copy * Only shallow copy
*/ */
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
NamedObjectCollection c = new NamedObjectCollection(); NamedObjectCollection c=new NamedObjectCollection();
c.addAll(this); c.addAll(this);
return c; return c;
} }

89
src/de/memtext/baseobjects/coll/NamedObjectList.java

@ -12,67 +12,58 @@ import java.util.ListIterator;
* */ * */
public class NamedObjectList extends NamedObjectCollection implements List { public class NamedObjectList extends NamedObjectCollection implements List {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public NamedObjectList() {
super();
collect = new LinkedList();
}
public NamedObjectList() { public Object get(int pos)
super(); {
collect = new LinkedList(); return ((List)collect).get(pos);
} }
@Override public boolean addAll(int arg0, Collection arg1) {
public Object get(int pos) { return ((List)collect).addAll(arg0,arg1);
return ((List) collect).get(pos); }
}
@Override
public boolean addAll(int arg0, Collection arg1) {
return ((List) collect).addAll(arg0, arg1);
}
@Override public Object set(int arg0, Object arg1) {
public Object set(int arg0, Object arg1) { return ((List)collect).set(arg0,arg1);
return ((List) collect).set(arg0, arg1); }
}
@Override public void add(int pos, Object arg1) {
public void add(int pos, Object arg1) { ((List)collect).add(pos,arg1);
((List) collect).add(pos, arg1); }
}
@Override public Object remove(int arg0) {
public Object remove(int arg0) { return ((List)collect).remove(arg0);
return ((List) collect).remove(arg0); }
}
@Override
public ListIterator listIterator(int arg0) {
return ((List) collect).listIterator(arg0);
}
@Override public ListIterator listIterator(int arg0) {
public List subList(int arg0, int arg1) { return ((List)collect).listIterator(arg0);
return ((List) collect).subList(arg0, arg1); }
}
@Override public List subList(int arg0, int arg1) {
public int indexOf(Object arg0) { return ((List)collect).subList(arg0,arg1);
return ((List) collect).indexOf(arg0); }
}
@Override public int indexOf(Object arg0) {
public int lastIndexOf(Object arg0) { return ((List)collect).indexOf(arg0);
return ((List) collect).lastIndexOf(arg0); }
}
@Override public int lastIndexOf(Object arg0) {
public ListIterator listIterator() { return ((List)collect).lastIndexOf(arg0);
return ((List) collect).listIterator(); }
}
public ListIterator listIterator() {
return ((List)collect).listIterator();
}
/** /**
* Only shallow copy * Only shallow copy
*/ */
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
NamedObjectCollection c = new NamedObjectList(); NamedObjectCollection c=new NamedObjectList();
c.addAll(this); c.addAll(this);
return c; return c;
} }

30
src/de/memtext/baseobjects/coll/NamedObjectSet.java

@ -3,26 +3,24 @@ package de.memtext.baseobjects.coll;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
public class NamedObjectSet extends NamedObjectCollection implements Set { public class NamedObjectSet extends NamedObjectCollection implements Set {
private static final long serialVersionUID = 1; private static final long serialVersionUID = 1;
public NamedObjectSet() {
super();
collect=new HashSet();
}
public NamedObjectSet() { public NamedObjectSet(Set set) {
super(); super();
collect = new HashSet(); if (set==null)throw new IllegalArgumentException("set must not be null");
} collect=set;
}
public NamedObjectSet(Set set) {
super();
if (set == null) throw new IllegalArgumentException("set must not be null");
collect = set;
}
/** /**
* Only shallow copy * Only shallow copy
*/ */
@Override
protected Object clone() throws CloneNotSupportedException { protected Object clone() throws CloneNotSupportedException {
NamedObjectCollection c = new NamedObjectSet(); NamedObjectCollection c=new NamedObjectSet();
c.addAll(this); c.addAll(this);
return c; return c;
} }

153
src/de/memtext/buttons/ButtonGroupPanel.java

@ -3,89 +3,86 @@ package de.memtext.buttons;
import java.util.Enumeration; import java.util.Enumeration;
import javax.swing.ButtonGroup; import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JRadioButton; import javax.swing.JRadioButton;
public class ButtonGroupPanel extends JPanel { public class ButtonGroupPanel extends JPanel {
ButtonGroup group = new ButtonGroup(); ButtonGroup group = new ButtonGroup();
ButtonWithValue hiddenNoSelectionButton = new ButtonWithValue("", null);
ButtonWithValue hiddenNoSelectionButton = new ButtonWithValue("", null);
public ButtonGroupPanel() {
public ButtonGroupPanel() { this(null);
this(null); }
} public ButtonGroupPanel(String header) {
super();
public ButtonGroupPanel(String header) { if (header != null)
super(); this.add(new JLabel(header));
if (header != null) this.add(new JLabel(header));
hiddenNoSelectionButton.setVisible(false);
hiddenNoSelectionButton.setVisible(false); hiddenNoSelectionButton.setSelected(true);
hiddenNoSelectionButton.setSelected(true); group.add(hiddenNoSelectionButton);
group.add(hiddenNoSelectionButton); }
} public void addCategory(String label, Object value,boolean isSelected) {
ButtonWithValue b = new ButtonWithValue(label, value);
public void addCategory(String label, Object value, boolean isSelected) { this.add(b);
ButtonWithValue b = new ButtonWithValue(label, value); group.add(b);
this.add(b); b.setSelected(isSelected);
group.add(b); }
b.setSelected(isSelected); public void addCategory(String label, Object value) {
} addCategory(label, value,false);
}
public void addCategory(String label, Object value) {
addCategory(label, value, false); public void addCategory(String label, int i) {
} addCategory(label, new Integer(i));
}
public void addCategory(String label, int i) { public void addCategory(String label, int i,boolean isSelected) {
addCategory(label, Integer.valueOf(i)); addCategory(label, new Integer(i),isSelected);
} }
/**
public void addCategory(String label, int i, boolean isSelected) { * If you pass null as an argument no element will be selected
addCategory(label, Integer.valueOf(i), isSelected); * @param label
} */
public void setSelected(String label) {
/** if (label == null)
* If you pass null as an argument no element will be selected hiddenNoSelectionButton.setSelected(true);
* @param label else
*/ for (Enumeration en = group.getElements();
public void setSelected(String label) { en.hasMoreElements();
if (label == null) ) {
hiddenNoSelectionButton.setSelected(true); ButtonWithValue b = (ButtonWithValue) en.nextElement();
else if (b.getText().equals(label)) {
for (Enumeration en = group.getElements(); en.hasMoreElements();) { b.doClick();
ButtonWithValue b = (ButtonWithValue) en.nextElement(); break;
if (b.getText().equals(label)) { }
b.doClick(); }
break; }
}
} public Object getSelectedValue() {
} ButtonWithValue selectedButton=null;
for (Enumeration en = group.getElements();
public Object getSelectedValue() { en.hasMoreElements();
ButtonWithValue selectedButton = null; ) {
for (Enumeration en = group.getElements(); en.hasMoreElements();) { ButtonWithValue b = (ButtonWithValue) en.nextElement();
ButtonWithValue b = (ButtonWithValue) en.nextElement(); if (b.isSelected()) {
if (b.isSelected()) { selectedButton=b;
selectedButton = b; break;
break; }
} }
} return selectedButton.getValue();
return selectedButton.getValue(); }
} class ButtonWithValue extends JRadioButton {
private Object value;
class ButtonWithValue extends JRadioButton { ButtonWithValue(String label, Object value) {
private Object value; super(label);
this.value = value;
ButtonWithValue(String label, Object value) { }
super(label); Object getValue() {
this.value = value; return value;
} }
Object getValue() { }
return value;
}
}
} }

49
src/de/memtext/buttons/Standard.java

@ -10,29 +10,30 @@ import javax.swing.JButton;
*/ */
public class Standard { public class Standard {
/** /**
* Constructor for Standard. * Constructor for Standard.
*/ */
private Standard() { private Standard() {
super(); super();
} }
public static JButton getCopy() { public static JButton getCopy()
{
JButton copy = new JButton(de.memtext.icons.MBStandardIcons.getCopy());
copy.setToolTipText("Kopieren"); JButton copy=new JButton(de.memtext.icons.MBStandardIcons.getCopy());
copy.setActionCommand("copy"); copy.setToolTipText("Kopieren");
return copy; copy.setActionCommand("copy");
return copy;
}
}
public static JButton getCopyWithText() { public static JButton getCopyWithText()
{
JButton copy = new JButton("Kopieren", de.memtext.icons.MBStandardIcons.getCopy());
copy.setToolTipText("Kopieren"); JButton copy=new JButton("Kopieren",de.memtext.icons.MBStandardIcons.getCopy());
copy.setActionCommand("copy"); copy.setToolTipText("Kopieren");
return copy; copy.setActionCommand("copy");
return copy;
}
}
} }

3
src/de/memtext/db/AbstractHsqlStandaloneMgrResources.java

@ -31,7 +31,6 @@
package de.memtext.db; package de.memtext.db;
import java.util.ListResourceBundle; import java.util.ListResourceBundle;
/** /**
* Resources for HsqlStandaloneMgr. * Resources for HsqlStandaloneMgr.
* For other locales extend AbstractHsqlStandloneMgrResources, i.e. * For other locales extend AbstractHsqlStandloneMgrResources, i.e.
@ -39,6 +38,6 @@ import java.util.ListResourceBundle;
*/ */
public abstract class AbstractHsqlStandaloneMgrResources extends ListResourceBundle { public abstract class AbstractHsqlStandaloneMgrResources extends ListResourceBundle {
public abstract String getDbInUseBy(String dbname, String user); public abstract String getDbInUseBy(String dbname,String user);
} }

268
src/de/memtext/db/AddProc.java

@ -10,7 +10,6 @@ import java.text.DateFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
/** /**
* Additional procedures for HSQLDB * Additional procedures for HSQLDB
* make sure that this class in the classpath. * make sure that this class in the classpath.
@ -28,131 +27,148 @@ import java.util.Date;
*/ */
public class AddProc { public class AddProc {
private static DateFormat dfUS = new SimpleDateFormat("yyyy-MM-dd"); private static DateFormat dfUS = new SimpleDateFormat("yyyy-MM-dd");
private AddProc() { private AddProc() {
super(); super();
} }
/**
/** * Fills regular tables with values from a CSV-file.
* Fills regular tables with values from a CSV-file. * Similar to Postgres COPY FROM command.
* Similar to Postgres COPY FROM command. *
* * If you want to fill your table TEST with data from test.csv
* If you want to fill your table TEST with data from test.csv * make sure that this class in the classpath and that<br>
* make sure that this class in the classpath and that<br> * GRANT ALL ON CLASS "org.hsqldb.Library2" TO PUBLIC;<br>
* GRANT ALL ON CLASS "org.hsqldb.Library2" TO PUBLIC;<br> CREATE ALIAS COPYFROM FOR "org.hsqldb.Library2.copyFrom"<br>
CREATE ALIAS COPYFROM FOR "org.hsqldb.Library2.copyFrom"<br> * has been called in your database at some point.
* has been called in your database at some point. <br>
<br> * Then execute <br>
* Then execute <br> * CALL COPYFROM('TEST','test.csv',null)<br>
* CALL COPYFROM('TEST','test.csv',null)<br> * <br>
* <br> * if your not using , but | as a field separator<br>
* if your not using , but | as a field separator<br> CALL COPYFROM('TEST','test.csv','fs=|')<br>
CALL COPYFROM('TEST','test.csv','fs=|')<br> <br>
<br> *
* * @param con - Connection is automatically handed over by HSQL
* @param con - Connection is automatically handed over by HSQL * @param table - the name of the table that is to be filled
* @param table - the name of the table that is to be filled * if you created your table with "", e.g. create table "myData" <br>
* if you created your table with "", e.g. create table "myData" <br> * also pass the inverted commans like this CALL COPYFROM('\"myData\"','test.csv',null);
* also pass the inverted commans like this CALL COPYFROM('\"myData\"','test.csv',null); *
* * @param file - the filename of the CSV-file
* @param file - the filename of the CSV-file * @param options - you can specify options separated by ;
* @param options - you can specify options separated by ; * which are described in the text table documentation e.g.<br>
* which are described in the text table documentation e.g.<br> * fs=| to use pipe instead of default comma as field separator or<br>
* fs=| to use pipe instead of default comma as field separator or<br> *
* * fs=|;vs=.;lvs=~" varchar separator, longvarchar separator<br>
* fs=|;vs=.;lvs=~" varchar separator, longvarchar separator<br> * ignore_first=true; ignore first line<br>
* ignore_first=true; ignore first line<br> * all_quoted=true or<br>
* all_quoted=true or<br> * encoding=UTF-8 if you don't have ASCII<br>
* encoding=UTF-8 if you don't have ASCII<br> * @throws SQLException
* @throws SQLException */
*/ public static String copyFrom(
public static String copyFrom(Connection con, String table, String file, String options) throws SQLException { Connection con,
if (table == null || table.equals("")) throw new IllegalArgumentException("Table must not be null or empty"); String table,
if (file == null || file.equals("")) throw new IllegalArgumentException("File must not be null or empty"); String file,
File f = new File(file); String options)
if (!f.exists()) throw new IllegalArgumentException("source file " + file + " doesn't exist"); throws SQLException {
if (table == null || table.equals(""))
//normally created tables are in UPPERCASE in the metadata, throw new IllegalArgumentException("Table must not be null or empty");
//but tables in inverted commas (create table "myData") if (file == null || file.equals(""))
//are stored case sensitive throw new IllegalArgumentException("File must not be null or empty");
String tableNameInMetaData; File f = new File(file);
if (table.startsWith("\"")) if (!f.exists())
tableNameInMetaData = table.substring(1, table.length() - 1); throw new IllegalArgumentException(
else "source file " + file + " doesn't exist");
tableNameInMetaData = table.toUpperCase();
StringBuffer buf = new StringBuffer("create temp text table TMP_COPYFROM("); //normally created tables are in UPPERCASE in the metadata,
//but tables in inverted commas (create table "myData")
ResultSet rs = con.getMetaData().getColumns(null, null, tableNameInMetaData, null); //are stored case sensitive
String colname, coltype; String tableNameInMetaData;
boolean tableFound = false; if (table.startsWith("\""))
while (rs.next()) { tableNameInMetaData = table.substring(1, table.length() - 1);
tableFound = true; else
colname = rs.getObject(4).toString(); tableNameInMetaData = table.toUpperCase();
coltype = rs.getObject(6).toString(); StringBuffer buf =
buf.append(colname + " " + coltype + ","); new StringBuffer("create temp text table TMP_COPYFROM(");
}
rs.close(); ResultSet rs =
if (!tableFound) throw new SQLException("Copy from failed - table " + table + " not found"); con.getMetaData().getColumns(null, null, tableNameInMetaData, null);
buf.deleteCharAt(buf.lastIndexOf(",")); String colname, coltype;
buf.append("); SET TABLE TMP_COPYFROM SOURCE \"" + file); boolean tableFound = false;
if (options != null) buf.append(";" + options); while (rs.next()) {
buf.append("\";"); tableFound = true;
buf.append("insert into " + table + " select * from TMP_COPYFROM"); colname = rs.getObject(4).toString();
System.out.println(buf); coltype = rs.getObject(6).toString();
Statement stmt = con.createStatement(); buf.append(colname + " " + coltype + ",");
try { }
stmt.execute(buf.toString()); rs.close();
return "success"; if (!tableFound)
} throw new SQLException(
//finally is executed before returning whether an exception occurs or not "Copy from failed - table "
finally { + table
stmt.execute("drop table TMP_COPYFROM IF EXISTS"); + " not found");
} buf.deleteCharAt(buf.lastIndexOf(","));
buf.append("); SET TABLE TMP_COPYFROM SOURCE \"" + file);
} if (options != null)
buf.append(";" + options);
buf.append("\";");
public static String toDate(String year, String month, String day) throws ParseException { buf.append("insert into " + table + " select * from TMP_COPYFROM");
String result; System.out.println(buf);
Date d = dfUS.parse(year.trim() + "-" + month.trim() + "-" + day.trim()); Statement stmt = con.createStatement();
result = dfUS.format(d); try {
return result; stmt.execute(buf.toString());
} return "success";
}
public static String toDate(String year, int month, int day) throws ParseException { //finally is executed before returning whether an exception occurs or not
return toDate(year + "", month + "", day + ""); finally {
} stmt.execute("drop table TMP_COPYFROM IF EXISTS");
}
public static String toDate(int year, int month, int day) throws ParseException {
return toDate(year + "", month + "", day + ""); }
}
public static String toDate(String year, String month, String day)
public static void main(String a[]) { throws ParseException {
Connection conn = null; String result;
try { Date d =
Class.forName("org.hsqldb.jdbcDriver"); dfUS.parse(year.trim() + "-" + month.trim() + "-" + day.trim());
conn = DriverManager.getConnection("jdbc:hsqldb:test", "sa", ""); result = dfUS.format(d);
java.sql.Statement stmt = conn.createStatement(); return result;
stmt.execute("drop table \"test\" if exists;create table \"test\" (col1 integer,col2 varchar, col3 double,col4 date)"); }
copyFrom(conn, "\"test\"", "test.csv", "fs=;"); public static String toDate(String year, int month, int day)
System.out.println("2"); throws ParseException {
copyFrom(conn, "\"test\"", "test.csv", "fs=;"); return toDate(year + "", month + "", day + "");
stmt.close(); }
public static String toDate(int year, int month, int day)
} catch (ClassNotFoundException e) { throws ParseException {
e.printStackTrace(); return toDate(year + "", month + "", day + "");
} catch (SQLException e) {
e.printStackTrace(); }
} finally { public static void main(String a[]) {
try { Connection conn = null;
conn.close(); try {
} catch (SQLException e1) { Class.forName("org.hsqldb.jdbcDriver");
e1.printStackTrace(); conn = DriverManager.getConnection("jdbc:hsqldb:test", "sa", "");
} java.sql.Statement stmt = conn.createStatement();
} stmt.execute(
} "drop table \"test\" if exists;create table \"test\" (col1 integer,col2 varchar, col3 double,col4 date)");
copyFrom(conn, "\"test\"", "test.csv", "fs=;");
System.out.println("2");
copyFrom(conn, "\"test\"", "test.csv", "fs=;");
stmt.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
} }
//Created on 08.03.2004 at 13:48:03 //Created on 08.03.2004 at 13:48:03

52
src/de/memtext/db/Comparison.java

@ -17,33 +17,27 @@ import java.util.LinkedList;
* Window>Preferences>Java>Code Generation>Code and Comments * Window>Preferences>Java>Code Generation>Code and Comments
*/ */
public class Comparison { public class Comparison {
private String name; private String name;
private Collection units = new LinkedList();
private Collection units = new LinkedList(); public Comparison(String name) {
this.name = name;
public Comparison(String name) { }
this.name = name; public void addUnit(ComparisonUnit unit) {
} units.add(unit);
public void addUnit(ComparisonUnit unit) { }
units.add(unit); public Iterator iterator()
{
} return units.iterator();
}
public Iterator iterator() { public int getUnitCount()
return units.iterator(); {
} return units.size();
}
public int getUnitCount() { public void removeUnit(ComparisonUnit unit) {
return units.size(); units.remove(unit);
} }
public String toString() {
public void removeUnit(ComparisonUnit unit) { return name;
units.remove(unit); }
}
@Override
public String toString() {
return name;
}
} }

61
src/de/memtext/db/ComparisonUnit.java

@ -13,39 +13,38 @@ package de.memtext.db;
* Window>Preferences>Java>Code Generation>Code and Comments * Window>Preferences>Java>Code Generation>Code and Comments
*/ */
public class ComparisonUnit { public class ComparisonUnit {
private String name, sql; private String name,sql;
public ComparisonUnit(String name,String sql)
public ComparisonUnit(String name, String sql) { {
this.name = name; this.name=name;
this.sql = sql; this.sql=sql;
} }
/**
/** * @return
* @return */
*/ public String getName() {
public String getName() { return name;
return name; }
}
/** /**
* @return * @return
*/ */
public String getSql() { public String getSql() {
return sql; return sql;
} }
/** /**
* @param string * @param string
*/ */
public void setName(String string) { public void setName(String string) {
name = string; name = string;
} }
/** /**
* @param string * @param string
*/ */
public void setSql(String string) { public void setSql(String string) {
sql = string; sql = string;
} }
} }

177
src/de/memtext/db/ConnectionCreator.java

@ -1,5 +1,4 @@
package de.memtext.db; package de.memtext.db;
import java.io.IOException; import java.io.IOException;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
@ -8,7 +7,6 @@ import java.util.Properties;
import de.memtext.util.CryptUtils; import de.memtext.util.CryptUtils;
import de.memtext.util.PropUtils; import de.memtext.util.PropUtils;
/** /**
* This class is a utility that makes the creation of database connections * This class is a utility that makes the creation of database connections
* easier. If necessary, one can use loadClass("jdbdcDriver-class") and then * easier. If necessary, one can use loadClass("jdbdcDriver-class") and then
@ -18,83 +16,112 @@ import de.memtext.util.PropUtils;
*/ */
public class ConnectionCreator { public class ConnectionCreator {
public static void loadClass(String className) { public static void loadClass(String className) {
try { try {
Class.forName(className); Class.forName(className);
} catch (Exception e) {
System.out.println(e.toString());
System.exit(0);
}
}
public static Connection getConnection(String url, String username, String passwd) throws SQLException {
return DriverManager.getConnection(url, username, passwd);
}
public static Connection getConnection(String driver, String url, String username, String passwd) throws SQLException, ClassNotFoundException {
Class.forName(driver);
return getConnection(url, username, passwd);
}
public static Connection getConnectionQuitOnException(String driver, String url, String username, String passwd) { } catch (Exception e) {
Connection con = null; System.out.println(e.toString());
try { System.exit(0);
con = getConnection(driver, url, username, passwd); }
} catch (Exception e) { }
System.out.println("Couldn't create connection to database " + url + "\n" + e.toString()); public static Connection getConnection(
System.exit(-1); String url,
} String username,
return con; String passwd) throws SQLException
} {
public static Connection getConnection(String propfilename, String driverkey, String urlkey, String usernamekey, String passwordkey) return DriverManager.getConnection(url, username, passwd);
throws IOException, SQLException, ClassNotFoundException { }
Properties props = PropUtils.getProps(propfilename); public static Connection getConnection(
String driver = PropUtils.getProperty(props, driverkey); String driver,
String url = PropUtils.getProperty(props, urlkey); String url,
String username = PropUtils.getProperty(props, usernamekey); String username,
String passwd = PropUtils.getProperty(props, passwordkey); String passwd)
return getConnection(driver, url, username, passwd); throws SQLException, ClassNotFoundException {
Class.forName(driver);
return getConnection(url, username, passwd);
}
} public static Connection getConnectionQuitOnException(
String driver,
String url,
String username,
String passwd) {
Connection con = null;
try {
con = getConnection(driver, url, username, passwd);
} catch (Exception e) {
System.out.println(
"Couldn't create connection to database "
+ url
+ "\n"
+ e.toString());
System.exit(-1);
}
return con;
}
public static Connection getConnection(
String propfilename,
String driverkey,
String urlkey,
String usernamekey,
String passwordkey) throws IOException, SQLException, ClassNotFoundException
{
Properties props = PropUtils.getProps(propfilename);
String driver = PropUtils.getProperty(props, driverkey);
String url = PropUtils.getProperty(props, urlkey);
String username = PropUtils.getProperty(props, usernamekey);
String passwd = PropUtils.getProperty(props, passwordkey);
return getConnection(driver, url, username, passwd);
public static Connection getConnection(String propfilename) throws IOException, SQLException, ClassNotFoundException { }
return getConnection(propfilename, "driver", "url", "username", "password"); public static Connection getConnection(String propfilename) throws IOException, SQLException, ClassNotFoundException
} {
return getConnection(
propfilename,
"driver",
"url",
"username",
"password");
}
/** /**
* Method getConnectionCryptPassword. * Method getConnectionCryptPassword.
* 28.10.08 EInfache Verschlüsselungsmethode wird nicht mehr unterstützt * 28.10.08 EInfache Verschlüsselungsmethode wird nicht mehr unterstützt
* @param propfilename * @param propfilename
* @param string * @param string
* @param string1 * @param string1
* @param string11 * @param string11
* @param string111 * @param string111
* @return Connection * @return Connection
* @throws IOException * @throws IOException
* @throws ClassNotFoundException * @throws ClassNotFoundException
* @throws SQLException * @throws SQLException
*/ */
public static Connection getConnectionCryptPassword(String propfilename, String driverkey, String urlkey, String usernamekey, String passwordkey) public static Connection getConnectionCryptPassword(
throws IOException, SQLException, ClassNotFoundException { String propfilename,
Properties props = PropUtils.getProps(propfilename); String driverkey,
String driver = PropUtils.getProperty(props, driverkey); String urlkey,
String url = PropUtils.getProperty(props, urlkey); String usernamekey,
String username = PropUtils.getProperty(props, usernamekey); String passwordkey) throws IOException, SQLException, ClassNotFoundException
String passwd = PropUtils.getProperty(props, passwordkey); {
if (passwd.startsWith("sx_des")) { Properties props = PropUtils.getProps(propfilename);
try { String driver = PropUtils.getProperty(props, driverkey);
passwd = CryptUtils.decryptStringDES(passwd.substring(6)); String url = PropUtils.getProperty(props, urlkey);
} catch (Exception e) { String username = PropUtils.getProperty(props, usernamekey);
e.printStackTrace(); String passwd =PropUtils.getProperty(props, passwordkey);
throw new SQLException("DES-Passwort konnte nicht entschlüsselt werden"); if (passwd.startsWith("sx_des")) {
} try {
} passwd = CryptUtils.decryptStringDES(passwd.substring(6));
// else } catch (Exception e) {
// passwd=de.memtext.util.CryptUtils.decryptSimple(passwd ); e.printStackTrace();
return getConnection(driver, url, username, passwd); throw new SQLException("DES-Passwort konnte nicht entschlüsselt werden");
} }
}
// else
// passwd=de.memtext.util.CryptUtils.decryptSimple(passwd );
return getConnection(driver, url, username, passwd);
}
} }

60
src/de/memtext/db/DB.java

@ -1,43 +1,37 @@
package de.memtext.db; package de.memtext.db;
import de.memtext.baseobjects.NamedObject; import de.memtext.baseobjects.NamedObject;
/** /**
* This class represents a Database system like Informix or Postgres * This class represents a Database system like Informix or Postgres
*/ */
public class DB extends NamedObject { public class DB extends NamedObject {
private String version; private String version;
static public final DB INFORMIX = new DB("Informix", "7.3");
static public final DB INFORMIX = new DB("Informix", "7.3"); static public final DB POSTGRES = new DB("Postgres", "7.3");
static public final DB ACCESS = new DB("Access", "2000");
static public final DB POSTGRES = new DB("Postgres", "7.3"); /**
* The public constructors are needed because the DB class is
static public final DB ACCESS = new DB("Access", "2000"); * a java bean which is cool for XMLEncoding
*
/** */
* The public constructors are needed because the DB class is public DB() {
* a java bean which is cool for XMLEncoding this("Unbekannte Datenbank","");
* }
*/ public DB(String name) {
public DB() { this(name, "");
this("Unbekannte Datenbank", ""); }
}
public DB(String name, String version) {
public DB(String name) { super(name);
this(name, ""); this.version = version;
} }
public DB(String name, String version) { public boolean equals(Object o) {
super(name); if (!(o instanceof DB))
this.version = version; return false;
} DB db = (DB) o;
return this.getName().equals(db.getName());
@Override }
public boolean equals(Object o) {
if (!(o instanceof DB)) return false;
DB db = (DB) o;
return this.getName().equals(db.getName());
}
} }
//Created on 03.12.2003 at 15:54:27 //Created on 03.12.2003 at 15:54:27

1717
src/de/memtext/db/DBAccess.java

File diff suppressed because it is too large Load Diff

140
src/de/memtext/db/DBComparison.java

@ -9,70 +9,96 @@ import de.memtext.util.StringUtils;
public class DBComparison { public class DBComparison {
private DBComparison() { private DBComparison() {
super(); super();
} }
public static void main(String a[]) {
try {
Class.forName("org.hsqldb.jdbcDriver");
public static void main(String a[]) { java.sql.Connection con =
try { DriverManager.getConnection(
Class.forName("org.hsqldb.jdbcDriver"); "jdbc:hsqldb:hsql://localhost:9000",
"sa",
"");
DBAccess.addConnection("ssc", con);
java.sql.Connection con2 =
DriverManager.getConnection(
"jdbc:hsqldb:hsql://localhost:9500",
"sa",
"");
DBAccess.addConnection("ssc-test", con2);
compare("ssc", "ssc-test");
java.sql.Connection con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9000", "sa", ""); } catch (ClassNotFoundException e) {
DBAccess.addConnection("ssc", con); e.printStackTrace();
java.sql.Connection con2 = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9500", "sa", ""); } catch (SQLException e) {
DBAccess.addConnection("ssc-test", con2); e.printStackTrace();
compare("ssc", "ssc-test"); } catch (Exception e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) { }
e.printStackTrace(); private static void compare(String db1, String db2) {
} catch (SQLException e) { System.out.println("Start comparing...");
e.printStackTrace(); StringBuffer fineTables =
} catch (Exception e) { new StringBuffer("The following tables are fine: ");
e.printStackTrace(); List tableList = DBAccess.get(db1).getTableList();
} boolean isOk = false;
for (Iterator it = tableList.iterator(); it.hasNext();) {
String table = (String) it.next();
} if (DBAccess.get(db2).hasTable(table)) {
isOk = true;
if (DBAccess.get(db1).getColumnCount(table)
!= DBAccess.get(db2).getColumnCount(table)) {
System.out.println(
"Table "
+ table
+ " has a different number of columns");
isOk = false;
} else {
List colList = DBAccess.get(db1).getColumnNames(table);
for (Iterator it2 = colList.iterator(); it2.hasNext();) {
String colname = (String) it2.next();
if (!DBAccess.get(db2).hasColumn(table, colname)) {
System.out.println(
"Table "
+ table
+ " in "
+ db2
+ " doesn't have column:"
+ colname);
isOk = false;
} else {
private static void compare(String db1, String db2) throws SQLException { if (DBAccess.get(db1).getColumnType(table, colname)
System.out.println("Start comparing..."); != DBAccess.get(db2).getColumnType(
StringBuffer fineTables = new StringBuffer("The following tables are fine: "); table,
List tableList = DBAccess.get(db1).getTableList(); colname)) {
boolean isOk = false; System.out.println(
for (Iterator it = tableList.iterator(); it.hasNext();) { "Table "
String table = (String) it.next(); + table
+ " column:"
+ colname
+ " are of different types");
isOk = false;
}
if (DBAccess.get(db2).hasTable(table)) { }
isOk = true; }
if (DBAccess.get(db1).getColumnCount(table) != DBAccess.get(db2).getColumnCount(table)) { if (isOk)
System.out.println("Table " + table + " has a different number of columns"); fineTables.append(table + ",");
isOk = false; }
} else {
List colList = DBAccess.get(db1).getColumnNames(table);
for (Iterator it2 = colList.iterator(); it2.hasNext();) {
String colname = (String) it2.next();
if (!DBAccess.get(db2).hasColumn(table, colname)) {
System.out.println("Table " + table + " in " + db2 + " doesn't have column:" + colname);
isOk = false;
} else {
if (DBAccess.get(db1).getColumnType(table, colname) != DBAccess.get(db2).getColumnType(table, colname)) { } else {
System.out.println("Table " + table + " column:" + colname + " are of different types"); System.out.println(db2 + " doesn't contain table:" + table);
isOk = false; }
} }
StringUtils.deleteLastChar(fineTables);
} System.out.println(fineTables);
} System.out.println("..done");
if (isOk) fineTables.append(table + ","); }
}
} else {
System.out.println(db2 + " doesn't contain table:" + table);
}
}
StringUtils.deleteLastChar(fineTables);
System.out.println(fineTables);
System.out.println("..done");
}
} }
//Created on 11.02.2004 at 13:19:36 //Created on 11.02.2004 at 13:19:36

11
src/de/memtext/db/DBServletException.java

@ -1,5 +1,4 @@
package de.memtext.db; package de.memtext.db;
/** /**
* Eine spezielle Exception im Servlet. * Eine spezielle Exception im Servlet.
* Wird zwar im Applet eigentlich nicht gebraucht, aber trotzdem * Wird zwar im Applet eigentlich nicht gebraucht, aber trotzdem
@ -8,12 +7,14 @@ package de.memtext.db;
* @author Marlies Winterstein * @author Marlies Winterstein
* @version 2.0, 18.2.2002 * @version 2.0, 18.2.2002
*/ */
public class DBServletException extends Exception { public class DBServletException extends Exception
public DBServletException() { {
public DBServletException()
{
super(); super();
} }
public DBServletException(String msg)
public DBServletException(String msg) { {
super(msg); super(msg);
} }
} }

127
src/de/memtext/db/DBTimer.java

@ -6,57 +6,90 @@ import java.sql.Statement;
import de.memtext.util.TimeUtils; import de.memtext.util.TimeUtils;
public class DBTimer { public class DBTimer {
private static int runCount = 200; private static int runCount=200;
private static boolean logEachRun=false;
//private static String driver="org.hsqldb.jdbcDriver";
private static String driver="com.informix.jdbc.IfxDriver";
//private static String url="jdbc:hsqldb:hsql://localhost:9001";
private static String url="jdbc:informix-sqli://jupiter:50000:informixserver=superx_host;database=superx";
private static String user="superx";
private static String passwd="anfang12";
private static String sql="execute procedure sp_cob_keychild('1',0);";
private static boolean logEachRun = false; //wenn ein zweiter Sql folgen soll - drop table tmp_xx muss z.B. in eigenem Aufruf sein.
private static String sql2=null;//"select sum(betrag) from cob_busa,tmp_children T where fikrkey=T.key";
//private static String driver="org.hsqldb.jdbcDriver";
private static String driver = "com.informix.jdbc.IfxDriver";
//private static String url="jdbc:hsqldb:hsql://localhost:9001";
private static String url = "jdbc:informix-sqli://jupiter:50000:informixserver=superx_host;database=superx";
private static String user = "superx";
private static String passwd = "anfang12";
private static String sql = "execute procedure sp_cob_keychild('1',0);";
//wenn ein zweiter Sql folgen soll - drop table tmp_xx muss z.B. in eigenem Aufruf sein.
private static String sql2 = null;//"select sum(betrag) from cob_busa,tmp_children T where fikrkey=T.key";
//"select sum(betrag) from cob_busa where fikrkey in (select key from tmp_children)"; //"select sum(betrag) from cob_busa where fikrkey in (select key from tmp_children)";
private static String sql3=null;//"drop table tmp_children;";
private static String sql3 = null;//"drop table tmp_children;";
public static void main(String[] args) { public static void main(String[] args) {
//sql="select sum(betrag) from cob_busa C, tmp_children T where fikrkey=T.key and T.parent='1'"; //sql="select sum(betrag) from cob_busa C, tmp_children T where fikrkey=T.key and T.parent='1'";
sql = "select sum(betrag) from cob_busa where fikrkey in ('1', \n" + " '11 ', \n" + " '111 ', \n" + " '1111 ', \n" + " '1112 ', \n" + " '112 ', \n" sql = "select sum(betrag) from cob_busa where fikrkey in ('1', \n" +
+ " '1121 ', \n" + " '1122 ', \n" + " '113 ', \n" + " '1131 ', \n" + " '1132 ', \n" + " '12 ', \n" + " '121 ', \n" + " '1211 ', \n" " '11 ', \n" +
+ " '1212 ', \n" + " '1213 ', \n" + " '122 ', \n" + " '123 ', \n" + " '124 ', \n" + " '125 ', \n" + " '126 ', \n" + " '13 ', \n" " '111 ', \n" +
+ " '131 ', \n" + " '1311 ', \n" + " '1312 ', \n" + " '1313 ', \n" + " '132 ', \n" + " '1321 ', \n" + " '1322 ', \n" + " '1323 ', \n" " '1111 ', \n" +
+ " '133 ', \n" + " '1331 ', \n" + " '1332 ', \n" + " '1333 ', \n" + " '1334 ', \n" + " '134 ', \n" + " '135 ', \n" + " '136 ', \n" " '1112 ', \n" +
+ " '137 ', \n" + " '138 ')"; " '112 ', \n" +
try { " '1121 ', \n" +
Class.forName(driver); " '1122 ', \n" +
Connection conn = java.sql.DriverManager.getConnection(url, user, passwd); " '113 ', \n" +
Statement stmt = conn.createStatement(); " '1131 ', \n" +
TimeUtils t = new TimeUtils(); " '1132 ', \n" +
System.out.println("start " + sql); " '12 ', \n" +
for (int i = 1; i <= runCount; i++) { " '121 ', \n" +
if (logEachRun) System.out.println(i); " '1211 ', \n" +
stmt.execute(sql); " '1212 ', \n" +
if (sql2 != null) stmt.execute(sql2); " '1213 ', \n" +
if (sql3 != null) stmt.execute(sql3); " '122 ', \n" +
} " '123 ', \n" +
t.print(runCount + " times"); " '124 ', \n" +
stmt.close(); " '125 ', \n" +
conn.close(); " '126 ', \n" +
System.out.println("done"); " '13 ', \n" +
" '131 ', \n" +
" '1311 ', \n" +
" '1312 ', \n" +
" '1313 ', \n" +
" '132 ', \n" +
" '1321 ', \n" +
" '1322 ', \n" +
" '1323 ', \n" +
" '133 ', \n" +
" '1331 ', \n" +
" '1332 ', \n" +
" '1333 ', \n" +
" '1334 ', \n" +
" '134 ', \n" +
" '135 ', \n" +
" '136 ', \n" +
" '137 ', \n" +
" '138 ')";
try {
Class.forName(driver);
Connection conn =
java.sql.DriverManager.getConnection(
url,
user,
passwd);
Statement stmt = conn.createStatement();
TimeUtils t=new TimeUtils();
System.out.println("start "+sql);
for (int i=1;i<=runCount;i++)
{
if (logEachRun) System.out.println(i);
stmt.execute(sql);
if (sql2!=null)
stmt.execute(sql2);
if (sql3!=null)
stmt.execute(sql3);
}
t.print(runCount+" times");
stmt.close();
conn.close();
System.out.println("done");
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
System.exit(-1); System.exit(-1);
} }
} }
} }

185
src/de/memtext/db/DataSource.java

@ -5,105 +5,102 @@ import java.sql.DriverManager;
import java.sql.SQLException; import java.sql.SQLException;
import de.memtext.baseobjects.NamedObject; import de.memtext.baseobjects.NamedObject;
import de.memtext.util.CryptUtils;
/** /**
* wonder what this is * wonder what this is
*/ */
public class DataSource extends NamedObject { public class DataSource extends NamedObject {
private static final String CRYPT_PREFIX = "^^@@@"; private static final String CRYPT_PREFIX = "^^@@@";
private String url, username, cryptPassword, driver;
private String url, username, cryptPassword, driver; private transient String password;
private DB db;
private transient String password; public DataSource() {
}
private DB db;
public DataSource(String url, String username, String password) {
public DataSource() { setUrl(url);
} setUsername(username);
setPassword(password);
public DataSource(String url, String username, String password) { }
setUrl(url);
setUsername(username); public void setInformixSampleValues() {
setPassword(password); setUrl("jupiter:50000:informixserver=superx_host;database=superx");
} setUsername("informix");
setPassword("");
public void setInformixSampleValues() { this.db=DB.INFORMIX;
setUrl("jupiter:50000:informixserver=superx_host;database=superx"); }
setUsername("informix"); public void setAccessSampleValues() {
setPassword(""); setUrl("jdbc:odbc:jdbcodbc:");
this.db = DB.INFORMIX; setUsername("informix");
} setPassword("");
this.db=DB.ACCESS;
public void setAccessSampleValues() { }
setUrl("jdbc:odbc:jdbcodbc:");
setUsername("informix"); public String getDriver() {
setPassword(""); return driver;
this.db = DB.ACCESS; }
}
public String getPassword() {
public String getDriver() { return password;
return driver; }
}
public String getUrl() {
public String getPassword() { return url;
return password; }
}
public String getUsername() {
public String getUrl() { return username;
return url; }
}
public void setDriver(String string) {
public String getUsername() { driver = string;
return username; }
}
public void setPassword(String string) {
public void setDriver(String string) { password = string;
driver = string; this.setCryptPassword(string);
} }
public void setPassword(String string) { public void setUrl(String string) {
password = string; url = string;
this.setCryptPassword(string); }
}
public void setUsername(String string) {
public void setUrl(String string) { username = string;
url = string; }
}
public DB getDb() {
public void setUsername(String string) { return db;
username = string; }
}
public void setDb(DB db) {
public DB getDb() { this.db = db;
return db; }
}
public void testConnection() throws SQLException, ClassNotFoundException {
public void setDb(DB db) { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
this.db = db; Connection con=DriverManager.getConnection(url,username,password);
} con.close();
public void testConnection() throws SQLException, ClassNotFoundException {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }
Connection con = DriverManager.getConnection(url, username, password);
con.close(); public String getCryptPassword() {
return cryptPassword;
}
}
public void setCryptPassword(String aPwd) {
public String getCryptPassword() { if (!isEncrypted(aPwd))
return cryptPassword; {
} //cryptPassword =CRYPT_PREFIX + CryptUtils.encryptStringDES(aPwd);
}
public void setCryptPassword(String aPwd) { }
if (!isEncrypted(aPwd)) {
//cryptPassword =CRYPT_PREFIX + CryptUtils.encryptStringDES(aPwd); public boolean isEncrypted(String aPwd)
} {
} return aPwd.startsWith(CRYPT_PREFIX);
}
public boolean isEncrypted(String aPwd) {
return aPwd.startsWith(CRYPT_PREFIX);
}
} }
//Created on 17.04.2004 at 16:28:15 //Created on 17.04.2004 at 16:28:15

197
src/de/memtext/db/DataSourceEditPanel.java

@ -15,107 +15,102 @@ import de.memtext.widgets.MultilineEditPanel;
import de.memtext.widgets.WarningMessage; import de.memtext.widgets.WarningMessage;
public class DataSourceEditPanel extends MultilineEditPanel { public class DataSourceEditPanel extends MultilineEditPanel {
private DataSource ds; private DataSource ds;
private LabeledTextField hostField = new LabeledTextField("Host", 10);
private LabeledTextField hostField = new LabeledTextField("Host", 10); private LabeledTextField serverField = new LabeledTextField("Server", 10);
private LabeledTextField serviceField = new LabeledTextField("Service", 10);
private LabeledTextField serverField = new LabeledTextField("Server", 10); private LabeledTextField odbcSourceField =
new LabeledTextField("Odbc-DSN", 10);
private LabeledTextField serviceField = new LabeledTextField("Service", 10); private LabeledTextField usernameField =
new LabeledTextField("Kennung", 10);
private LabeledTextField odbcSourceField = new LabeledTextField("Odbc-DSN", 10); private LabeledTextField passwordField =
new LabeledPasswordField("Password", 10);
private LabeledTextField usernameField = new LabeledTextField("Kennung", 10); private JPanel pButtons = new JPanel();
private LabeledTextField passwordField = new LabeledPasswordField("Password", 10); public DataSourceEditPanel() {
this.setBackground(null);
private JPanel pButtons = new JPanel(); odbcSourceField.setValue("sospos");
odbcSourceField.setBackground(null);
public DataSourceEditPanel() { usernameField.setValue("admin");
this.setBackground(null); this.add(hostField);
odbcSourceField.setValue("sospos"); this.add(serverField);
odbcSourceField.setBackground(null); this.add(serviceField);
usernameField.setValue("admin"); this.add(odbcSourceField);
this.add(hostField);
this.add(serverField); this.add(usernameField);
this.add(serviceField);
this.add(odbcSourceField); this.add(passwordField);
//this.addGlue();
this.add(usernameField); JButton btnTesten = new JButton("testen");
btnTesten.setBackground(null);
this.add(passwordField); pButtons.setBackground(null);
//this.addGlue(); btnTesten.addActionListener(new ActionListener() {
JButton btnTesten = new JButton("testen"); public void actionPerformed(ActionEvent ae) {
btnTesten.setBackground(null); test();
pButtons.setBackground(null); }
btnTesten.addActionListener(new ActionListener() { });
pButtons.add(btnTesten);
@Override //this.addGlue();
public void actionPerformed(ActionEvent ae) { this.add(pButtons);
test(); }
} public void setDataSource(DataSource ds) {
}); this.ds = ds;
pButtons.add(btnTesten); setMode(ds.getDb());
//this.addGlue(); }
this.add(pButtons); public void addButton(JButton btn) {
} pButtons.add(btn);
}
public void setDataSource(DataSource ds) { private void setMode(DB db) {
this.ds = ds; if (db.equals(DB.ACCESS)) {
setMode(ds.getDb()); odbcSourceField.setVisible(true);
} hostField.setVisible(false);
serverField.setVisible(false);
public void addButton(JButton btn) { serviceField.setVisible(false);
pButtons.add(btn); }
} if (db.equals(DB.INFORMIX)) {
odbcSourceField.setVisible(false);
private void setMode(DB db) { hostField.setVisible(true);
if (db.equals(DB.ACCESS)) { serverField.setVisible(true);
odbcSourceField.setVisible(true); serviceField.setVisible(true);
hostField.setVisible(false); }
serverField.setVisible(false); }
serviceField.setVisible(false); protected void test() {
} updateDataSource();
if (db.equals(DB.INFORMIX)) { try {
odbcSourceField.setVisible(false); ds.testConnection();
hostField.setVisible(true); InfoMessage.show(this, "Verbindung erfolgreich aufgebaut", "Erfolg");
serverField.setVisible(true); } catch (SQLException e) {
serviceField.setVisible(true); if (ds.getDb().equals( DB.ACCESS)) {
} WarningMessage.show(this,
} "Verbindung zur ODBC-Quelle "
+ odbcSourceField.getValue()
protected void test() { + " konnte nicht aufgebaut werden.\n"
updateDataSource(); + e,
try { "Achtung");
ds.testConnection(); }
InfoMessage.show(this, "Verbindung erfolgreich aufgebaut", "Erfolg"); } catch (ClassNotFoundException e) {
} catch (SQLException e) { WarningMessage.show(this,
if (ds.getDb().equals(DB.ACCESS)) { "Benötigte Treiber-Klase nicht gefunden ",
WarningMessage.show(this, "Verbindung zur ODBC-Quelle " + odbcSourceField.getValue() + " konnte nicht aufgebaut werden.\n" + e, "Achtung"); "Achtung");
} }
} catch (ClassNotFoundException e) { }
WarningMessage.show(this, "Benötigte Treiber-Klase nicht gefunden ", "Achtung"); public void updateDataSource() {
} if (ds.getDb() == DB.ACCESS) {
} ds.setUrl("jdbc:odbc:" + odbcSourceField.getValue());
}
public void updateDataSource() { ds.setUsername(usernameField.getValue().toString());
if (ds.getDb() == DB.ACCESS) { ds.setPassword("");
ds.setUrl("jdbc:odbc:" + odbcSourceField.getValue()); }
} public void addDocumentListener(DocumentListenerObserver listener) {
ds.setUsername(usernameField.getValue().toString()); hostField.addDocumentListener(listener);
ds.setPassword(""); serverField.addDocumentListener(listener);
} serviceField.addDocumentListener(listener);
odbcSourceField.addDocumentListener(listener);
public void addDocumentListener(DocumentListenerObserver listener) {
hostField.addDocumentListener(listener); usernameField.addDocumentListener(listener);
serverField.addDocumentListener(listener);
serviceField.addDocumentListener(listener); passwordField.addDocumentListener(listener);
odbcSourceField.addDocumentListener(listener); }
usernameField.addDocumentListener(listener);
passwordField.addDocumentListener(listener);
}
} }
//Created on 17.04.2004 at 16:37:44 //Created on 17.04.2004 at 16:37:44

152
src/de/memtext/db/DbRequest.java

@ -14,79 +14,81 @@ package de.memtext.db;
*/ */
public class DbRequest public class DbRequest
implements java.io.Serializable { implements java.io.Serializable {
static final long serialVersionUID = -2L; static final long serialVersionUID = -2L;
private String sql; private String sql;
private String name;
private String name; private Object[] params;
private int type;
private Object[] params; private DbRequestType dbRequestType;
public DbRequest(String sql)
private int type; {
this(null,sql,null,null);
private DbRequestType dbRequestType; }
public DbRequest(String name,String sql,Object[] params)
public DbRequest(String sql) { {
this(null, sql, null, null); this(name,sql,params,null);
} }
/**
public DbRequest(String name, String sql, Object[] params) { * Request type used by servlet
this(name, sql, params, null); * @param name
} * @param sql
* @param params
/** * @param dbRequestType
* Request type used by servlet */
* @param name public DbRequest(String name,String sql,Object[] params,DbRequestType dbRequestType)
* @param sql {
* @param params setName(name);
* @param dbRequestType setSql(sql);
*/ setParams(params);
public DbRequest(String name, String sql, Object[] params, DbRequestType dbRequestType) { this.dbRequestType=dbRequestType;
setName(name); }
setSql(sql);
setParams(params); public String getName()
this.dbRequestType = dbRequestType; {
} return name;
}
public String getName() {
return name; public void setName(String name)
} {
this.name=name;
public void setName(String name) { }
this.name = name;
} public Object[] getParams()
{
public Object[] getParams() { return params;
return params; }
}
public void setParams(Object[] params)
public void setParams(Object[] params) { {
this.params = params; this.params=params;
} }
public String getSql() { public String getSql()
return sql; {
} return sql;
}
public void setSql(String sql) {
this.sql = sql; public void setSql(String sql)
} {
this.sql=sql;
/** }
* @return
*/ /**
public DbRequestType getDbRequestType() { * @return
return dbRequestType; */
} public DbRequestType getDbRequestType() {
return dbRequestType;
/** }
* @param type
*/ /**
public void setDbRequestType(DbRequestType type) { * @param type
dbRequestType = type; */
} public void setDbRequestType(DbRequestType type) {
dbRequestType = type;
} }
}

22
src/de/memtext/db/DbRequestType.java

@ -14,18 +14,14 @@ package de.memtext.db;
*/ */
public class DbRequestType { public class DbRequestType {
private final String name; private final String name;
public static final DbRequestType QUERY = new DbRequestType("QUERY"); public static final DbRequestType QUERY=new DbRequestType("QUERY");
public static final DbRequestType UPDATE=new DbRequestType("UPDATE");
public static final DbRequestType UPDATE = new DbRequestType("UPDATE"); private DbRequestType(String name)
{
private DbRequestType(String name) { this.name=name;
this.name = name; }
} public String toString() {return name;
}
@Override
public String toString() {
return name;
}
} }

85
src/de/memtext/db/DbResponse.java

@ -15,55 +15,44 @@ import java.util.Collection;
* Window>Preferences>Java>Code Generation>Code and Comments * Window>Preferences>Java>Code Generation>Code and Comments
*/ */
public class DbResponse implements java.io.Serializable { public class DbResponse implements java.io.Serializable {
static final long serialVersionUID = -3L; static final long serialVersionUID = -3L;
private Collection result;
private boolean OK;
private Exception exception;
private int updatedRowsCount;
private Collection result; /**
* MyServletResponse constructor comment.
private boolean OK; */
public DbResponse(Collection result, boolean OK, Exception exception) {
private Exception exception; this.result = result;
this.OK = OK;
private int updatedRowsCount; this.exception = exception;
}
/** public Exception getException() {
* MyServletResponse constructor comment. return exception;
*/ }
public DbResponse(Collection result, boolean OK, Exception exception) { public Collection getResult() {
this.result = result; return result;
this.OK = OK; }
this.exception = exception; public boolean isOK() {
} return OK;
}
public Exception getException() { public void setException(Exception exception) {
return exception; this.exception = exception;
} }
public void setOK(boolean OK) {
public Collection getResult() { this.OK = OK;
return result; }
} public void setResult(Collection result) {
this.result = result;
public boolean isOK() { }
return OK; public int getUpdatedRowsCount() {
} return updatedRowsCount;
}
public void setException(Exception exception) {
this.exception = exception;
}
public void setOK(boolean OK) {
this.OK = OK;
}
public void setResult(Collection result) {
this.result = result;
}
public int getUpdatedRowsCount() {
return updatedRowsCount;
}
public void setUpdatedRowsCount(int updatedRowsCount) { public void setUpdatedRowsCount(int updatedRowsCount) {
this.updatedRowsCount = updatedRowsCount; this.updatedRowsCount = updatedRowsCount;
} }
} }

161
src/de/memtext/db/DbRmiClient.java

@ -21,85 +21,90 @@ import java.util.List;
* Window>Preferences>Java>Code Generation>Code and Comments * Window>Preferences>Java>Code Generation>Code and Comments
*/ */
public class DbRmiClient { public class DbRmiClient {
private DbServerI dbServerI = null; private DbServerI dbServerI= null;
String name="DbServer"; //"//localhost/DbServer"
String name = "DbServer"; //"//localhost/DbServer" public DbRmiClient()
{
public DbRmiClient() { if (System.getSecurityManager() == null) {
if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager());
System.setSecurityManager(new RMISecurityManager()); }
} try {
try { dbServerI = (DbServerI)Naming.lookup(name);
dbServerI = (DbServerI) Naming.lookup(name); } catch (MalformedURLException e) {
} catch (MalformedURLException e) { e.printStackTrace();
e.printStackTrace(); } catch (RemoteException e) {
} catch (RemoteException e) { e.printStackTrace();
e.printStackTrace(); } catch (NotBoundException e) {
} catch (NotBoundException e) { e.printStackTrace();
e.printStackTrace(); }
} }
} public void test()
{
public void test() { testUpdate();
testUpdate(); testQuery();
testQuery(); }
} private void testUpdate() {
try {
private void testUpdate() {
try { DbRequest dbRequest=new DbRequest("update dummy set col2=99");
DbResponse dbResponse=dbServerI.execute(dbRequest);
DbRequest dbRequest = new DbRequest("update dummy set col2=99"); if (dbResponse.isOK())
DbResponse dbResponse = dbServerI.execute(dbRequest); {
if (dbResponse.isOK()) { System.out.println("OK - updated rows :" + dbResponse.getUpdatedRowsCount());
System.out.println("OK - updated rows :" + dbResponse.getUpdatedRowsCount()); }
} else { else
System.out.println("failed :" + dbResponse.getException()); {
} System.out.println("failed :"+dbResponse.getException());
}
} catch (Exception e) {
System.out.println(" exception: " + e.getMessage()); } catch (Exception e) {
e.printStackTrace(); System.out.println(" exception: " + e.getMessage());
} e.printStackTrace();
} }
}
private void testQuery() {
try {
DbRequest dbRequest = new DbRequest("select * from dummy");
DbResponse dbResponse = dbServerI.executeQuery("select * from dummy");
if (dbResponse.isOK()) {
System.out.println("OK");
List result = (List) dbResponse.getResult();
System.out.println("rows:" + result.size());
int i = 0;
for (Iterator it = result.iterator(); it.hasNext();) {
List row = (List) it.next();
i++;
System.out.print("row " + i + " ");
for (Iterator it2 = row.iterator(); it2.hasNext();) {
Object o = it2.next();
System.out.print(" - " + o);
}
System.out.println("");
}
} else {
System.out.println("failed :" + dbResponse.getException());
}
} catch (Exception e) {
System.out.println(" exception: " + e.getMessage());
e.printStackTrace();
}
}
public static void main(String a[]) { private void testQuery() {
DbRmiClient c = new DbRmiClient(); try {
c.test();
DbRequest dbRequest=new DbRequest("select * from dummy");
DbResponse dbResponse=dbServerI.executeQuery("select * from dummy");
if (dbResponse.isOK())
{
System.out.println("OK");
List result=(List)dbResponse.getResult();
System.out.println("rows:"+result.size());
int i=0;
for (Iterator it=result.iterator();it.hasNext();)
{
List row=(List)it.next();
i++;
System.out.print("row "+i+" ");
for (Iterator it2=row.iterator();it2.hasNext();)
{
Object o=it2.next();
System.out.print(" - "+o);
}
System.out.println("");
}
}
else
{
System.out.println("failed :"+dbResponse.getException());
}
} catch (Exception e) {
System.out.println(" exception: " + e.getMessage());
e.printStackTrace();
}
}
public static void main(String a[]) {
DbRmiClient c=new DbRmiClient();
c.test();
} }
} }

11
src/de/memtext/db/DbServerI.java

@ -16,11 +16,8 @@ import java.rmi.RemoteException;
* Window>Preferences>Java>Code Generation>Code and Comments * Window>Preferences>Java>Code Generation>Code and Comments
*/ */
public interface DbServerI extends Remote { public interface DbServerI extends Remote {
public DbResponse execute(String sql) throws RemoteException; public DbResponse execute(String sql) throws RemoteException;
public DbResponse executeQuery(String sql) throws RemoteException;
public DbResponse executeQuery(String sql) throws RemoteException; public DbResponse execute(DbRequest dbRequest) throws RemoteException;
public DbResponse executeQuery(DbRequest dbRequest) throws RemoteException;
public DbResponse execute(DbRequest dbRequest) throws RemoteException;
public DbResponse executeQuery(DbRequest dbRequest) throws RemoteException;
} }

191
src/de/memtext/db/DbServerImpl.java

@ -22,105 +22,96 @@ import java.util.List;
* To change the template for this generated type comment go to * To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments * Window>Preferences>Java>Code Generation>Code and Comments
*/ */
public class DbServerImpl extends UnicastRemoteObject implements de.memtext.db.DbServerI { public class DbServerImpl
private String dbDriver = "org.hsqldb.jdbcDriver"; extends UnicastRemoteObject
implements de.memtext.db.DbServerI {
private String dbURL = "jdbc:hsqldb:hsql://localhost:9000"; private String dbDriver = "org.hsqldb.jdbcDriver";
private String dbURL = "jdbc:hsqldb:hsql://localhost:9000";
private String userid = "SA"; private String userid = "SA";
private String passwd = "";
private String passwd = ""; private int updateRowCount;
private Connection con;
private int updateRowCount; private Statement stmt;
public DbServerImpl() throws RemoteException {
private Connection con; super();
ConnectionCreator.loadClass(dbDriver);
private Statement stmt; try {
con = ConnectionCreator.getConnection(dbURL, userid, passwd);
public DbServerImpl() throws RemoteException { stmt = con.createStatement();
super(); } catch (Exception e) {
ConnectionCreator.loadClass(dbDriver); e.printStackTrace();
try { throw new RemoteException("Couldn't connect to DB" + e.toString());
con = ConnectionCreator.getConnection(dbURL, userid, passwd); }
stmt = con.createStatement(); }
} catch (Exception e) { public DbResponse execute(String sql) throws RemoteException {
e.printStackTrace(); DbResponse result = new DbResponse(null, true, null);
throw new RemoteException("Couldn't connect to DB" + e.toString()); try {
} updateRowCount = stmt.executeUpdate(sql);
} result.setUpdatedRowsCount(updateRowCount);
result.setOK(true);
@Override } catch (SQLException e) {
public DbResponse execute(String sql) throws RemoteException { e.printStackTrace();
DbResponse result = new DbResponse(null, true, null); result.setOK(false);
try { result.setException(e);
updateRowCount = stmt.executeUpdate(sql); }
result.setUpdatedRowsCount(updateRowCount); return result;
result.setOK(true); }
} catch (SQLException e) {
e.printStackTrace(); /* (non-Javadoc)
result.setOK(false); * @see de.mbisping.db.DbServerI#execute(de.mbisping.db.DbRequest)
result.setException(e); */
} public DbResponse execute(DbRequest dbRequest) throws RemoteException {
return result; DbResponse result = new DbResponse(null, true, null);
} if (dbRequest.getSql() != null)
result = execute(dbRequest.getSql());
/* (non-Javadoc)
* @see de.mbisping.db.DbServerI#execute(de.mbisping.db.DbRequest) return result;
*/ }
@Override
public DbResponse execute(DbRequest dbRequest) throws RemoteException { public DbResponse executeQuery(String sql) throws RemoteException {
DbResponse result = new DbResponse(null, true, null); DbResponse result = new DbResponse(null, true, null);
if (dbRequest.getSql() != null) result = execute(dbRequest.getSql()); try {
ResultSet rs=stmt.executeQuery(sql);
return result; List list=DbUtils.toResultList(rs);
} result.setResult(list);
result.setOK(true);
@Override } catch (SQLException e) {
public DbResponse executeQuery(String sql) throws RemoteException { e.printStackTrace();
DbResponse result = new DbResponse(null, true, null); result.setOK(false);
try { result.setException(e);
ResultSet rs = stmt.executeQuery(sql); }
List list = DbUtils.toResultList(rs); return result;
result.setResult(list); }
result.setOK(true); /* (non-Javadoc)
} catch (SQLException e) { * @see de.mbisping.db.DbServerI#executeQuery(de.mbisping.db.DbRequest)
e.printStackTrace(); */
result.setOK(false); public DbResponse executeQuery(DbRequest dbRequest)
result.setException(e); throws RemoteException {
} DbResponse result = new DbResponse(null, true, null);
return result; result.setUpdatedRowsCount(20);
} return result;
}
/* (non-Javadoc)
* @see de.mbisping.db.DbServerI#executeQuery(de.mbisping.db.DbRequest) public static void main(String args[]) {
*/
@Override // Create and install a security manager
public DbResponse executeQuery(DbRequest dbRequest) throws RemoteException { if (System.getSecurityManager() == null) {
DbResponse result = new DbResponse(null, true, null); System.setSecurityManager(new RMISecurityManager());
result.setUpdatedRowsCount(20); }
return result;
} try {
public static void main(String args[]) { DbServerImpl obj = new DbServerImpl();
//String name="//localhost/DbServer";
// Create and install a security manager String name = "DbServer";
if (System.getSecurityManager() == null) { // Bind this object instance to the name "HelloServer"
System.setSecurityManager(new RMISecurityManager()); Naming.rebind(name, obj);
}
System.out.println(name + " bound in registry");
try { } catch (Exception e) {
System.out.println("DbServerImpl err: " + e.getMessage());
DbServerImpl obj = new DbServerImpl(); e.printStackTrace();
//String name="//localhost/DbServer"; }
String name = "DbServer"; }
// Bind this object instance to the name "HelloServer"
Naming.rebind(name, obj);
System.out.println(name + " bound in registry");
} catch (Exception e) {
System.out.println("DbServerImpl err: " + e.getMessage());
e.printStackTrace();
}
}
} }

242
src/de/memtext/db/DbUtils.java

@ -1,9 +1,12 @@
package de.memtext.db; package de.memtext.db;
import java.sql.Connection;
import java.sql.DriverManager; import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.ResultSetMetaData; import java.sql.ResultSetMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@ -13,87 +16,162 @@ import java.util.List;
*/ */
public class DbUtils { public class DbUtils {
/** /**
* *
*/ */
private DbUtils() { private DbUtils() {
} }
/* private Vector toResultVector(ResultSet rs) throws SQLException /*
{ * private Vector toResultVector(ResultSet rs) throws SQLException { Vector help
Vector help = new Vector(); * = new Vector(); ResultSetMetaData rsmd = rs.getMetaData(); int
ResultSetMetaData rsmd = rs.getMetaData(); * numberOfColumns = rsmd.getColumnCount();
int numberOfColumns = rsmd.getColumnCount(); *
* Vector row = null; while (rs.next()) { row = new Vector(); for (int i = 1; i
Vector row = null; * <= numberOfColumns; i++) { row.add(rs.getObject(i)); } help.add(row); }
while (rs.next()) { * rs.close(); return help;
row = new Vector(); *
for (int i = 1; i <= numberOfColumns; i++) { * }
row.add(rs.getObject(i)); */
} public static List toResultList(ResultSet rs) throws SQLException {
help.add(row); List help = new LinkedList();
} ResultSetMetaData rsmd = rs.getMetaData();
rs.close(); int numberOfColumns = rsmd.getColumnCount();
return help;
List row = null;
}*/ while (rs.next()) {
public static List toResultList(ResultSet rs) throws SQLException { row = new LinkedList();
List help = new LinkedList(); for (int i = 1; i <= numberOfColumns; i++) {
ResultSetMetaData rsmd = rs.getMetaData(); row.add(rs.getObject(i));
int numberOfColumns = rsmd.getColumnCount(); }
help.add(row);
List row = null; }
while (rs.next()) { rs.close();
row = new LinkedList(); return help;
for (int i = 1; i <= numberOfColumns; i++) { }
row.add(rs.getObject(i));
} public static void grantRightToAllTables() {
help.add(row); String url = "jdbc:hsqldb:hsql://localhost:9999";
} String user = "";
rs.close(); String right = "select";
return help; try {
} Class.forName("org.hsqldb.jdbcDriver");
} catch (ClassNotFoundException e) {
public static void grantRightToAllTables() throws SQLException { e.printStackTrace();
String url = "jdbc:hsqldb:hsql://localhost:9999"; }
String user = "";
String right = "select"; try {
try { DBAccess.addConnection("dbConn", DriverManager.getConnection(url, "admin", "hatschi3000"));
Class.forName("org.hsqldb.jdbcDriver"); } catch (SQLException e1) {
} catch (ClassNotFoundException e) { e1.printStackTrace();
e.printStackTrace(); } catch (Exception e1) {
} e1.printStackTrace();
}
try { List tablist = DBAccess.get("dbConn").getTableList();
DBAccess.addConnection("dbConn", DriverManager.getConnection(url, "admin", "hatschi3000")); StringBuffer buf = new StringBuffer();
} catch (SQLException e1) { for (Iterator it = tablist.iterator(); it.hasNext();) {
e1.printStackTrace(); String tabname = (String) it.next();
} catch (Exception e1) { buf.append("grant " + right + " on " + tabname + " to " + user + ";");
e1.printStackTrace();
} }
List tablist = DBAccess.get("dbConn").getTableList(); DBAccess.get("dbConn").execute(buf.toString());
StringBuffer buf = new StringBuffer();
for (Iterator it = tablist.iterator(); it.hasNext();) { DBAccess.closeConnection("dbConn");
String tabname = (String) it.next();
buf.append("grant " + right + " on " + tabname + " to " + user + ";"); }
} /**
DBAccess.get("dbConn").execute(buf.toString()); * Places Object in inverted single commas if it isn't null
*
* @param val
* @return either "null" if val is null or "'val'"
DBAccess.closeConnection("dbConn"); */
public static String placeInInvertedCommas(Object val) {
} if (val == null)
return "null";
/** return "'" + val + "'";
* Places Object in inverted single commas if it isn't null }
* @param val
* @return either "null" if val is null or "'val'"
*/ public static int getInt(Statement stm, String query) throws SQLException {
public static String placeInInvertedCommas(Object val) { int result = -1;
if (val == null) return "null"; ResultSet rs = stm.executeQuery(query);
return "'" + val + "'"; while (rs.next()) {
} result = rs.getInt(1);
}
rs.close();
return result;
}
public static String getString(Statement stm, String query) throws SQLException {
String result = null;
ResultSet rs = stm.executeQuery(query);
while (rs.next()) {
result = rs.getString(1);
}
rs.close();
return result;
}
/**
*
* @param query
* @return -1 wenn nichts gefunden
* @throws SQLException
*/
public static int getInt(Connection con, String query,int param) throws SQLException {
int result = -1;
PreparedStatement pst=con.prepareStatement(query);
pst.setInt(1, param);
ResultSet rs = pst.executeQuery();
while (rs.next()) {
result = rs.getInt(1);
}
rs.close();
pst.close();
return result;
}
/**
*
* @param query
* @return -1 wenn nichts gefunden
* @throws SQLException
*/
public static int getInt(Connection con, String query,String param) throws SQLException {
int result = -1;
PreparedStatement pst=con.prepareStatement(query);
pst.setString(1, param);
ResultSet rs = pst.executeQuery();
while (rs.next()) {
result = rs.getInt(1);
}
rs.close();
pst.close();
return result;
}
/**
*
* @param con
* @param query
* @param param
* @return null if nothing found
* @throws SQLException
*/
public static String getString(Connection con,String query,String param) throws SQLException
{
String result=null;
PreparedStatement pst=con.prepareStatement(query);
pst.setString(1, param);
ResultSet rs = pst.executeQuery();
while (rs.next()) {
result = rs.getString(1);
}
rs.close();
pst.close();
return result;
}
} }
//Created on 21.06.2003 //Created on 21.06.2003

150
src/de/memtext/db/HsqlProcedures.java

@ -12,58 +12,112 @@ import java.sql.Statement;
*/ */
public class HsqlProcedures { public class HsqlProcedures {
/** /**
* Constructor for HsqlProcedures. * Constructor for HsqlProcedures.
*/ */
private HsqlProcedures() { private HsqlProcedures() {
super(); super();
} }
public static Integer get1() { public static Integer get1()
return Integer.valueOf(1); {
return new Integer(1);
} }
public static void alterTableColumnIntegerToVarchar(
java.sql.Connection con,
String tablename,
String columnname) {
try {
Statement stmt = con.createStatement();
// add new tmp varchar col
stmt.execute(
"alter table "
+ tablename
+ " add column tmp"
+ columnname
+ " varchar");
//update value of tmp
stmt.execute(
"update "
+ tablename
+ " set tmp"
+ columnname
+ "= "
+ columnname);
//drop original
stmt.execute(
"alter table " + tablename + " drop column " + columnname);
//add col with original name and of varchar type
stmt.execute(
"alter table "
+ tablename
+ " add column "
+ columnname
+ " varchar");
//update values
stmt.execute(
"update "
+ tablename
+ " set "
+ columnname
+ "= tmp"
+ columnname);
//drop tmp
stmt.execute(
"alter table " + tablename + " drop column tmp" + columnname);
} catch (Exception e) {
e.printStackTrace();
}
public static void alterTableColumnIntegerToVarchar(java.sql.Connection con, String tablename, String columnname) { }
try {
Statement stmt = con.createStatement();
// add new tmp varchar col
stmt.execute("alter table " + tablename + " add column tmp" + columnname + " varchar");
//update value of tmp
stmt.execute("update " + tablename + " set tmp" + columnname + "= " + columnname);
//drop original
stmt.execute("alter table " + tablename + " drop column " + columnname);
//add col with original name and of varchar type
stmt.execute("alter table " + tablename + " add column " + columnname + " varchar");
//update values
stmt.execute("update " + tablename + " set " + columnname + "= tmp" + columnname);
//drop tmp
stmt.execute("alter table " + tablename + " drop column tmp" + columnname);
} catch (Exception e) {
e.printStackTrace();
}
} public static void alterTableColumnVarcharToInteger(
java.sql.Connection con,
String tablename,
String columnname) {
try {
Statement stmt = con.createStatement();
// add new tmp varchar col
stmt.execute(
"alter table "
+ tablename
+ " add column tmp"
+ columnname
+ " integer");
//update value of tmp
stmt.execute(
"update "
+ tablename
+ " set tmp"
+ columnname
+ "= "
+ columnname);
//drop original
stmt.execute(
"alter table " + tablename + " drop column " + columnname);
//add col with original name and of varchar type
stmt.execute(
"alter table "
+ tablename
+ " add column "
+ columnname
+ " integer");
//update values
stmt.execute(
"update "
+ tablename
+ " set "
+ columnname
+ "= tmp"
+ columnname);
//drop tmp
stmt.execute(
"alter table " + tablename + " drop column tmp" + columnname);
} catch (Exception e) {
e.printStackTrace();
}
public static void alterTableColumnVarcharToInteger(java.sql.Connection con, String tablename, String columnname) { }
try {
Statement stmt = con.createStatement();
// add new tmp varchar col
stmt.execute("alter table " + tablename + " add column tmp" + columnname + " integer");
//update value of tmp
stmt.execute("update " + tablename + " set tmp" + columnname + "= " + columnname);
//drop original
stmt.execute("alter table " + tablename + " drop column " + columnname);
//add col with original name and of varchar type
stmt.execute("alter table " + tablename + " add column " + columnname + " integer");
//update values
stmt.execute("update " + tablename + " set " + columnname + "= tmp" + columnname);
//drop tmp
stmt.execute("alter table " + tablename + " drop column tmp" + columnname);
} catch (Exception e) {
e.printStackTrace();
}
}
} }

133
src/de/memtext/db/HsqlStandaloneMgr.java

@ -65,8 +65,9 @@ public class HsqlStandaloneMgr {
private static void initResources() { private static void initResources() {
String mypackage = ""; String mypackage = "";
//if you place the Resources classes in some package, define it like this //if you place the Resources classes in some package, define it like this
mypackage = "de.memtext.db."; mypackage="de.memtext.db.";
resources = (AbstractHsqlStandaloneMgrResources) ResourceBundle.getBundle(mypackage + "HsqlStandaloneMgrResources"); resources = (AbstractHsqlStandaloneMgrResources) ResourceBundle
.getBundle(mypackage + "HsqlStandaloneMgrResources");
} }
@ -82,7 +83,7 @@ public class HsqlStandaloneMgr {
* @return true if database is already opened * @return true if database is already opened
*/ */
public static boolean isDatabaseOpen(String path, String databasename) { public static boolean isDatabaseOpen(String path, String databasename) {
File lckFile = new File(getAdaptedPath(path) + databasename + ".lck"); File lckFile = new File(getAdaptedPath(path)+databasename+".lck");
return lckFile.exists(); return lckFile.exists();
} }
@ -97,21 +98,26 @@ public class HsqlStandaloneMgr {
* @param String * @param String
* databasename - of the original database, no _TMP_COPY appendix * databasename - of the original database, no _TMP_COPY appendix
*/ */
public static void deleteTmpFiles(String url, String path, String databasename) { public static void deleteTmpFiles(String url, String path,
if (databasename.indexOf("_TMP_COPY") > -1) throw new IllegalArgumentException("Please specifiy the name of the original database without _TMP_COPY"); String databasename) {
path = getAdaptedPath(path); if (databasename.indexOf("_TMP_COPY") > -1)
throw new IllegalArgumentException(
"Please specifiy the name of the original database without _TMP_COPY");
path=getAdaptedPath(path);
int tmpPos = url.indexOf("_TMP_COPY"); int tmpPos = url.indexOf("_TMP_COPY");
if (tmpPos == -1) { if (tmpPos == -1) {
//if the main connection is closed delete info about the user //if the main connection is closed delete info about the user
File f = new File(path + databasename + "_user.properties"); File f = new File(path + databasename + "_user.properties");
if (f.exists()) f.delete(); if (f.exists())
f.delete();
} else { } else {
//delete files for temp. connection //delete files for temp. connection
String tmp = url.substring(tmpPos); String tmp = url.substring(tmpPos);
if (path == null || path.equals("")) path = "."; if (path==null||path.equals("")) path=".";
File fpath = new File(path); File fpath = new File(path);
File tmpFiles[] = fpath.listFiles(new TmpFileFilter(databasename + tmp)); File tmpFiles[] = fpath.listFiles(new TmpFileFilter(databasename
+ tmp));
for (int i = 0; i < tmpFiles.length; i++) { for (int i = 0; i < tmpFiles.length; i++) {
tmpFiles[i].delete(); tmpFiles[i].delete();
} }
@ -134,11 +140,12 @@ public class HsqlStandaloneMgr {
*/ */
public static int askUser(Component parentComponent, String path, public static int askUser(Component parentComponent, String path,
String databasename, boolean isReadOnlyCopyWanted) { String databasename, boolean isReadOnlyCopyWanted) {
if (resources == null) initResources(); if (resources == null)
initResources();
String username = null; String username = null;
File f = new File(getAdaptedPath(path) + databasename + "_user.properties"); File f = new File(getAdaptedPath(path) + databasename + "_user.properties");
if (f.exists()) { if (f.exists()) {
Properties p = new Properties(); Properties p = new Properties();
FileInputStream fis; FileInputStream fis;
@ -148,18 +155,25 @@ public class HsqlStandaloneMgr {
username = p.getProperty("user"); username = p.getProperty("user");
fis.close(); fis.close();
} catch (Exception e) { } catch (Exception e) {
System.err.println(resources.getString("Couldn't read user name")); System.err.println(resources
.getString("Couldn't read user name"));
e.printStackTrace(); e.printStackTrace();
} }
} }
StringBuffer msg = new StringBuffer(resources.getDbInUseBy(databasename, username)); StringBuffer msg = new StringBuffer(resources.getDbInUseBy(
databasename, username));
if (isReadOnlyCopyWanted) if (isReadOnlyCopyWanted)
msg.append(resources.getString("Would you like to open a temporary copy in read-only mode?")); msg
.append(resources
.getString("Would you like to open a temporary copy in read-only mode?"));
else else
msg.append(resources.getString("Would you like to open a temporary copy?\nAttention - any changes to the database will be lost after closing the program!")); msg
return JOptionPane.showConfirmDialog(parentComponent, msg, "HSQLDB", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); .append(resources
.getString("Would you like to open a temporary copy?\nAttention - any changes to the database will be lost after closing the program!"));
return JOptionPane.showConfirmDialog(parentComponent, msg, "HSQLDB",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
} }
@ -186,9 +200,12 @@ public class HsqlStandaloneMgr {
* @throws SQLException * @throws SQLException
* @throws IOException * @throws IOException
*/ */
public static Connection getTmpConnection(Component parentComponent, String path, String databasename, String username, String password, boolean isReadOnlyCopyWanted) public static Connection getTmpConnection(Component parentComponent,
throws ClassNotFoundException, SQLException, IOException { String path, String databasename, String username, String password,
if (resources == null) initResources(); boolean isReadOnlyCopyWanted) throws ClassNotFoundException,
SQLException, IOException {
if (resources == null)
initResources();
Class.forName("org.hsqldb.jdbcDriver"); Class.forName("org.hsqldb.jdbcDriver");
path = getAdaptedPath(path); path = getAdaptedPath(path);
@ -197,33 +214,46 @@ public class HsqlStandaloneMgr {
try { try {
copyDatabaseFiles(path, databasename, tmpInstanceNumber); copyDatabaseFiles(path, databasename, tmpInstanceNumber);
} catch (IOException e) { } catch (IOException e) {
JOptionPane.showMessageDialog(parentComponent, resources.getString("Could not create temporary copy of database.)") + "\n" + e, "HSQLDB", JOptionPane.WARNING_MESSAGE); JOptionPane.showMessageDialog(parentComponent, resources
.getString("Could not create temporary copy of database.)")
+ "\n" + e, "HSQLDB", JOptionPane.WARNING_MESSAGE);
throw e; throw e;
} }
if (isReadOnlyCopyWanted) { if (isReadOnlyCopyWanted) {
try { try {
setReadonly(path + databasename + "_TMP_COPY" + tmpInstanceNumber + ".properties"); setReadonly(path + databasename + "_TMP_COPY"
+ tmpInstanceNumber + ".properties");
} catch (IOException e) { } catch (IOException e) {
JOptionPane.showMessageDialog(parentComponent, resources.getString("Could not set temporary copy of database to readonly mode.") + "\n" + e, "HSQLDB", JOptionPane
JOptionPane.WARNING_MESSAGE); .showMessageDialog(
parentComponent,
resources
.getString("Could not set temporary copy of database to readonly mode.")
+ "\n" + e, "HSQLDB",
JOptionPane.WARNING_MESSAGE);
throw e; throw e;
} }
} }
String url = "jdbc:hsqldb:file:" + path + databasename + "_TMP_COPY" + tmpInstanceNumber; String url = "jdbc:hsqldb:file:" + path + databasename
+ "_TMP_COPY" + tmpInstanceNumber;
Connection con = java.sql.DriverManager.getConnection(url, username, password); Connection con = java.sql.DriverManager.getConnection(url, username,
password);
if (!isReadOnlyCopyWanted) { if (!isReadOnlyCopyWanted) {
Statement stmt = con.createStatement(); Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select count(*) from system_tables where hsqldb_type='TEXT'"); ResultSet rs = stmt
.executeQuery("select count(*) from system_tables where hsqldb_type='TEXT'");
rs.next(); rs.next();
if (rs.getInt(1) > 0) { if (rs.getInt(1) > 0) {
stmt.execute("shutdown"); stmt.execute("shutdown");
stmt.close(); stmt.close();
con.close(); con.close();
deleteTmpFiles(url, path, databasename); deleteTmpFiles(url, path, databasename);
throw new SQLException(resources.getString("Handling non read-only temporary database with text tables is not supported")); throw new SQLException(
resources
.getString("Handling non read-only temporary database with text tables is not supported"));
} }
rs.close(); rs.close();
stmt.close(); stmt.close();
@ -233,7 +263,8 @@ public class HsqlStandaloneMgr {
private static int checkNumber(String path, String databasename) { private static int checkNumber(String path, String databasename) {
int result = 1; int result = 1;
while (new File(path + databasename + "_TMP_COPY" + result + ".script").exists()) while (new File(path + databasename + "_TMP_COPY" + result
+ ".script").exists())
result++; result++;
return result; return result;
} }
@ -256,19 +287,22 @@ public class HsqlStandaloneMgr {
* @throws SQLException * @throws SQLException
* @throws IOException * @throws IOException
*/ */
public static Connection getConnection(String path, String databasename, String username, String password) throws ClassNotFoundException, SQLException, IOException { public static Connection getConnection(String path, String databasename,
String username, String password) throws ClassNotFoundException,
SQLException, IOException {
Class.forName("org.hsqldb.jdbcDriver"); Class.forName("org.hsqldb.jdbcDriver");
String url = null; String url=null;
if (path == null) if (path==null)
url = "jdbc:hsqldb:" + databasename; url="jdbc:hsqldb:"+databasename;
else else
url = "jdbc:hsqldb:file:" + getAdaptedPath(path) + databasename; url = "jdbc:hsqldb:file:" + getAdaptedPath(path) + databasename;
Connection con = java.sql.DriverManager.getConnection(url, username, password); Connection con = java.sql.DriverManager.getConnection(url, username,
password);
Properties p = new Properties(); Properties p = new Properties();
p.put("user", System.getProperty("user.name")); p.put("user", System.getProperty("user.name"));
String filename = (path != null ? path + "/" + databasename + "_user.properties" : databasename + "_user.properties"); String filename=(path!=null?path+"/"+databasename+"_user.properties":databasename+"_user.properties");
FileOutputStream fos = new FileOutputStream(filename); FileOutputStream fos = new FileOutputStream(filename);
p.store(fos, "User which uses the HSQL database"); p.store(fos, "User which uses the HSQL database");
fos.close(); fos.close();
@ -284,8 +318,9 @@ public class HsqlStandaloneMgr {
* @return adapted path String * @return adapted path String
*/ */
private static String getAdaptedPath(String path) { private static String getAdaptedPath(String path) {
if (path == null) path = ""; if (path == null) path = "";
if ((path.equals(".") || path.length() > 1) && !(path.endsWith("/") || path.endsWith("\\"))) path += File.separator; if ((path.equals(".")||path.length()>1)&&!(path.endsWith("/")||path.endsWith("\\")))
path+=File.separator;
return path; return path;
} }
@ -315,15 +350,20 @@ public class HsqlStandaloneMgr {
* databasename * databasename
* @throws IOException * @throws IOException
*/ */
private static void copyDatabaseFiles(String path, String databasename, int number) throws IOException { private static void copyDatabaseFiles(String path, String databasename,
int number) throws IOException {
String s = path + databasename; String s = path + databasename;
copyFile(s + ".script", s + "_TMP_COPY" + number + ".script"); copyFile(s + ".script", s + "_TMP_COPY" + number + ".script");
copyFile(s + ".properties", s + "_TMP_COPY" + number + ".properties"); copyFile(s + ".properties", s + "_TMP_COPY" + number + ".properties");
if (new File(s + ".log").exists()) copyFile(s + ".log", s + "_TMP_COPY" + number + ".log"); if (new File(s + ".log").exists())
if (new File(s + ".data").exists()) copyFile(s + ".data", s + "_TMP_COPY" + number + ".data"); copyFile(s + ".log", s + "_TMP_COPY" + number + ".log");
if (new File(s + ".backup").exists()) copyFile(s + ".backup", s + "_TMP_COPY" + number + ".backup"); if (new File(s + ".data").exists())
if (new File(s + ".nio").exists()) copyFile(s + ".nio", s + "_TMP_COPY" + number + ".nio"); copyFile(s + ".data", s + "_TMP_COPY" + number + ".data");
if (new File(s + ".backup").exists())
copyFile(s + ".backup", s + "_TMP_COPY" + number + ".backup");
if (new File(s + ".nio").exists())
copyFile(s + ".nio", s + "_TMP_COPY" + number + ".nio");
} }
/** /**
@ -335,7 +375,8 @@ public class HsqlStandaloneMgr {
* target - target file name (incl. path if necessary) * target - target file name (incl. path if necessary)
* @throws IOException * @throws IOException
*/ */
static public void copyFile(String source, String target) throws IOException { static public void copyFile(String source, String target)
throws IOException {
try { try {
FileInputStream is = new FileInputStream(source); FileInputStream is = new FileInputStream(source);
@ -358,7 +399,8 @@ public class HsqlStandaloneMgr {
os.close(); os.close();
} catch (IOException e) { } catch (IOException e) {
throw new IOException("Couldn't copy file " + source + ": " + e.toString()); throw new IOException("Couldn't copy file " + source + ": "
+ e.toString());
} }
} }
@ -369,7 +411,6 @@ public class HsqlStandaloneMgr {
this.tmpName = tmpName; this.tmpName = tmpName;
} }
@Override
public boolean accept(File dir, String name) { public boolean accept(File dir, String name) {
return name.indexOf(tmpName) > -1; return name.indexOf(tmpName) > -1;
} }

30
src/de/memtext/db/HsqlStandaloneMgrResources.java

@ -29,36 +29,40 @@
*/ */
package de.memtext.db; package de.memtext.db;
/** /**
* Resources for HsqlStandaloneMgr. * Resources for HsqlStandaloneMgr.
* For other locales extend AbstractHsqlStandloneMgrResources, i.e. * For other locales extend AbstractHsqlStandloneMgrResources, i.e.
* by copying HsqlStandaloneMgrResources_de to your locale * by copying HsqlStandaloneMgrResources_de to your locale
*/ */
public class HsqlStandaloneMgrResources extends AbstractHsqlStandaloneMgrResources { public class HsqlStandaloneMgrResources extends
@Override AbstractHsqlStandaloneMgrResources {
public Object[][] getContents() { public Object[][] getContents() {
return contents; return contents;
} }
static final Object[][] contents = { static final Object[][] contents = {
{ "Couldn't read user name", "Couldn't read user name" }, { "Couldn't read user name", "Couldn't read user name" },
{ "Would you like to open a temporary copy in read-only mode?", "Would you like to open a temporary copy in read-only mode?" }, { "Would you like to open a temporary copy in read-only mode?",
{ "Would you like to open a temporary copy?\nAttention - any changes to the database will be lost after closing the program!", "Would you like to open a temporary copy in read-only mode?" },
"Would you like to open a temporary copy?\nAttention - any changes to the database will be lost after closing the program!" }, {
{ "Could not create temporary copy of database.", "Could not create temporary copy of database." }, "Would you like to open a temporary copy?\nAttention - any changes to the database will be lost after closing the program!",
{ "Could not set temporary copy of database to readonly mode.", "Could not set temporary copy of database to readonly mode." }, "Would you like to open a temporary copy?\nAttention - any changes to the database will be lost after closing the program!" },
{ "Handling non read-only temporary database with text tables is not supported", { "Could not create temporary copy of database.",
"Handling non read-only temporary database with text tables is not supported" } "Could not create temporary copy of database." },
{ "Could not set temporary copy of database to readonly mode.",
"Could not set temporary copy of database to readonly mode." },
{
"Handling non read-only temporary database with text tables is not supported",
"Handling non read-only temporary database with text tables is not supported" }
}; };
@Override
public String getDbInUseBy(String dbname, String user) { public String getDbInUseBy(String dbname, String user) {
String result = "The database " + dbname + " is already in use"; String result = "The database " + dbname + " is already in use";
if (user != null) result += " by user " + user; if (user != null)
result += " by user " + user;
result += ".\n"; result += ".\n";
return result; return result;
} }

31
src/de/memtext/db/HsqlStandaloneMgrResources_de.java

@ -29,33 +29,38 @@
*/ */
package de.memtext.db; package de.memtext.db;
/** /**
* Resources for HsqlStandaloneMgr. * Resources for HsqlStandaloneMgr.
* For other locales extend AbstractHsqlStandloneMgrResources, i.e. * For other locales extend AbstractHsqlStandloneMgrResources, i.e.
* by copying this class to your locale * by copying this class to your locale
*/ */
public class HsqlStandaloneMgrResources_de extends AbstractHsqlStandaloneMgrResources { public class HsqlStandaloneMgrResources_de extends
@Override AbstractHsqlStandaloneMgrResources {
public Object[][] getContents() { public Object[][] getContents() {
return contents; return contents;
} }
static final Object[][] contents = { { "Couldn't read user name", "Konnte Usernamen nicht lesen" }, static final Object[][] contents = {
{ "Would you like to open a temporary copy in read-only mode?", "Möchten Sie eine schreibgeschützte Kopie öffnen?" }, { "Couldn't read user name", "Konnte Usernamen nicht lesen" },
{ "Would you like to open a temporary copy?\nAttention - any changes to the database will be lost after closing the program!", { "Would you like to open a temporary copy in read-only mode?",
"Möchten Sie eine temporäre Kopie öffnen?\nAchtung, wenn Sie das Programm beenden, gehen alle Änderungen, die Sie vorgenommen haben, verloren!" }, "Möchten Sie eine schreibgeschützte Kopie öffnen?" },
{ "Could not create temporary copy of database.", "Konnte keine temporäre Kopie der Datenbank anlegen." }, {
{ "Could not set temporary copy of database to readonly mode.", "Konnte die temp. Kopie nicht auf schreibgeschützt setzen" }, "Would you like to open a temporary copy?\nAttention - any changes to the database will be lost after closing the program!",
{ "Handling non read-only temporary database with text tables is not supported", "Möchten Sie eine temporäre Kopie öffnen?\nAchtung, wenn Sie das Programm beenden, gehen alle Änderungen, die Sie vorgenommen haben, verloren!" },
"Nicht schreibgeschützte Datenbanken mit Text-Tables werden nicht unterstützt" } { "Could not create temporary copy of database.",
"Konnte keine temporäre Kopie der Datenbank anlegen." },
{ "Could not set temporary copy of database to readonly mode.",
"Konnte die temp. Kopie nicht auf schreibgeschützt setzen" },
{
"Handling non read-only temporary database with text tables is not supported",
"Nicht schreibgeschützte Datenbanken mit Text-Tables werden nicht unterstützt" }
}; };
@Override
public String getDbInUseBy(String dbname, String user) { public String getDbInUseBy(String dbname, String user) {
String result = "Die Datenbank " + dbname + " wird schon benutzt "; String result = "Die Datenbank " + dbname + " wird schon benutzt ";
if (user != null) result += " vom User " + user; if (user != null)
result += " vom User " + user;
result += ".\n"; result += ".\n";
return result; return result;
} }

126
src/de/memtext/db/Library2.java

@ -4,7 +4,6 @@ import java.sql.Connection;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
/** /**
* Additional procedures for HSQLDB * Additional procedures for HSQLDB
* make sure that this class in the classpath. * make sure that this class in the classpath.
@ -19,65 +18,74 @@ import java.sql.Statement;
* CREATE ALIAS COPYFROM FOR "org.hsqldb.Library2.copyFrom" * CREATE ALIAS COPYFROM FOR "org.hsqldb.Library2.copyFrom"
*/ */
public class Library2 { public class Library2 {
private Library2() { private Library2() {
super(); super();
} }
/**
/** * Fills regular tables with values from a CSV-file.
* Fills regular tables with values from a CSV-file. * Similar to Postgres COPY FROM command.
* Similar to Postgres COPY FROM command. *
* * If you want to fill your table TEST with data from test.csv
* If you want to fill your table TEST with data from test.csv * make sure that this class in the classpath and that
* make sure that this class in the classpath and that * GRANT ALL ON CLASS "org.hsqldb.Library2" TO PUBLIC and
* GRANT ALL ON CLASS "org.hsqldb.Library2" TO PUBLIC and * CREATE ALIAS COPYFROM FOR "org.hsqldb.Library2.copyFrom"
* CREATE ALIAS COPYFROM FOR "org.hsqldb.Library2.copyFrom" * has been called in your database at some point.
* has been called in your database at some point.
* * Then execute * * Then execute
* COPYFROM("TEST","test.csv",null) * COPYFROM("TEST","test.csv",null)
* *
* if your not using , but | as a field separator * if your not using , but | as a field separator
COPYFROM("TEST","test.csv","fs=|") COPYFROM("TEST","test.csv","fs=|")
* *
* @param con - Connection is automatically handed over by HSQL * @param con - Connection is automatically handed over by HSQL
* @param table - the name of the table that is to be filled * @param table - the name of the table that is to be filled
* if your table isn't found capital letters may be required * if your table isn't found capital letters may be required
* @param file - the filename of the CSV-file * @param file - the filename of the CSV-file
* @param options - you can specify options separated by ; * @param options - you can specify options separated by ;
* which are described in the text table documentation e.g. * which are described in the text table documentation e.g.
* fs=| to use pipe instead of default comma as field separator or * fs=| to use pipe instead of default comma as field separator or
* or * or
* fs=|;vs=.;lvs=~" varchar separator, longvarchar separator * fs=|;vs=.;lvs=~" varchar separator, longvarchar separator
* ignore_first=true; ignore first line * ignore_first=true; ignore first line
* all_quoted=true or * all_quoted=true or
* encoding=UTF-8 if you don't have ASCII * encoding=UTF-8 if you don't have ASCII
* @throws SQLException * @throws SQLException
*/ */
public static void copyFrom(Connection con, String table, String file, String options) throws SQLException { public static void copyFrom(
StringBuffer buf = new StringBuffer("create text table TMP_SOURCE_" + table + " ("); Connection con,
String table,
String file,
String options)
throws SQLException {
StringBuffer buf =
new StringBuffer("create text table TMP_SOURCE_" + table + " (");
ResultSet rs = con.getMetaData().getColumns(null, null, table, null); ResultSet rs = con.getMetaData().getColumns(null, null, table, null);
String colname, coltype; String colname, coltype;
boolean tableFound = false; boolean tableFound = false;
while (rs.next()) { while (rs.next()) {
tableFound = true; tableFound = true;
colname = rs.getObject(4).toString(); colname = rs.getObject(4).toString();
coltype = rs.getObject(6).toString(); coltype = rs.getObject(6).toString();
buf.append(colname + " " + coltype + ","); buf.append(colname + " " + coltype + ",");
} }
rs.close(); rs.close();
if (!tableFound) throw new IllegalArgumentException("Copy from failed - table " + table + " not found"); if (!tableFound)
buf.deleteCharAt(buf.lastIndexOf(",")); throw new IllegalArgumentException(
buf.append("); SET TABLE TMP_SOURCE_" + table + " SOURCE \"" + file); "Copy from failed - table " + table + " not found");
if (options != null) buf.append(";" + options); buf.deleteCharAt(buf.lastIndexOf(","));
buf.append("\";"); buf.append("); SET TABLE TMP_SOURCE_" + table + " SOURCE \"" + file);
buf.append("insert into " + table + " select * from TMP_SOURCE_" + table); if (options != null)
Statement stmt = con.createStatement(); buf.append(";" + options);
try { buf.append("\";");
stmt.execute(buf.toString()); buf.append(
} finally { "insert into " + table + " select * from TMP_SOURCE_" + table);
stmt.execute("drop table TMP_SOURCE_" + table + " IF EXISTS"); Statement stmt = con.createStatement();
} try {
} stmt.execute(buf.toString());
} finally {
stmt.execute("drop table TMP_SOURCE_" + table + " IF EXISTS");
}
}
} }

262
src/de/memtext/db/MemtextPool.java

@ -0,0 +1,262 @@
package de.memtext.db;
import java.io.File;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SignatureException;
import java.security.spec.InvalidKeySpecException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.xml.transform.TransformerConfigurationException;
import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDriver;
import org.apache.commons.pool.impl.GenericObjectPool;
import de.memtext.baseobjects.NamedObjectI;
import de.memtext.tree.KeyParentEqualException;
import de.memtext.util.DSAHandler;
/**
* A new Connection pool making use of Jakarta Commons dbcp.
*/
public class MemtextPool extends GenericObjectPool implements NamedObjectI {
private String name, subpath;
private String nameNoAppendix;
private Properties props = new Properties();
private String privateKeyEncoded = null;
private String publicKeyEncoded = null;
private DSAHandler dsaHandler;
public MemtextPool(String name, String nameAppendix, String subpath)
throws SQLException, IOException, DBServletException {
this.subpath = subpath;
nameNoAppendix = name;
this.setName(name + nameAppendix);
try {
readPropertiesAndUrl();
System.out
.print(" (" + props.getProperty("connectionURL") + ") ..");
} catch (Exception e) {
System.out
.println("Konnte properties / Passwort nicht lesen. " + e);
e.printStackTrace();
throw new DBServletException(
"Konnte properties / Passwort nicht lesen. " + e);
}
try {
Class.forName(props.getProperty("driverName"));
} catch (ClassNotFoundException e1) {
throw new DBServletException("Treiber "
+ props.getProperty("driverName")
+ " nicht gefunden. Ggfs. nach tomcat/common/lib kopieren.");
}
initLogging();
this.setTestOnBorrow(true);
int minIdle = 5;
if (props.getProperty("minIdle") != null
&& !props.getProperty("minIdle").trim().equals("")) {
minIdle = Integer.parseInt(props.getProperty("minIdle"));
}
this.setMinIdle(minIdle);
int maxIdle = -1;
if (props.getProperty("maxIdle") != null
&& !props.getProperty("maxIdle").trim().equals("")) {
maxIdle = Integer.parseInt(props.getProperty("maxIdle"));
}
if (maxIdle != -1)
setMaxIdle(maxIdle);
int maxActive = -1;
if (props.getProperty("maxActive") != null
&& !props.getProperty("maxActive").trim().equals("")) {
maxActive = Integer.parseInt(props.getProperty("maxActive"));
}
if (maxActive != -1)
setMaxActive(maxActive);
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
props.getProperty("connectionURL"), props);
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(
connectionFactory, this, null, "select count(*) from xdummy;" //validationQuery
, false, true);
int i = 1;
try {
// PoolingDriver driver = new PoolingDriver();
Class.forName("org.apache.commons.dbcp.PoolingDriver");
} catch (ClassNotFoundException e2) {
throw new DBServletException(
"ConnectionPool Klasse org.apache.commons.dbcp.PoolingDriver nicht gefunden.\ncommons-dbcp nach tomcat/common/lib stellen.");
}
PoolingDriver driver = (PoolingDriver) DriverManager
.getDriver("jdbc:apache:commons:dbcp:");
driver.registerPool(this.getName(), this);
Object x = driver.getConnectionPool(this.getName());
try {
Connection con = this.getConnection();
Statement st = con.createStatement();
ResultSet rs = st
.executeQuery("select value from properties where name='privatekey'");
while (rs.next()) {
privateKeyEncoded = rs.getString(1);
}
rs.close();
rs = st
.executeQuery("select value from properties where name='publickey'");
while (rs.next()) {
publicKeyEncoded = rs.getString(1);
}
rs.close();
st.close();
con.close();
} catch (SQLException e) {
String msg = "Fehler beim Aufbau des ConnectionPools ";
if (!getName().startsWith("default"))
msg += " für Mandant: " + getName();
msg += "\nKonnte keine Connection aus dem Pool holen.\n" + e;
throw new SQLException(msg);
}
if (privateKeyEncoded != null)
initDSAHandler();
}
protected void initLogging() throws IOException {
/*
* LogUtils.initRawFile("superx_" + getName(), getLogDir() + "/superx_" +
* name + ".log", 2000, 1, false, true); LogUtils.initRawFile("superx_" +
* getName() + "_xml", getLogDir() + "/superx_" + name + "_xml.log",
* 2000, 1, false, true);
*
* Level lev = Level.SEVERE;
*
* try { if (props.getProperty("logLevelSQL") != null) lev =
* Level.parse(props.getProperty("logLevelSQL")); } catch
* (IllegalArgumentException e) { String msg = "Ungültiger Level für
* sqlLogger "; if (!this.getName().equals("default")) msg += "(Mandant :" +
* getName() + ") "; msg += " :" + props.getProperty("logLevelSQL");
* System.out.println(msg); } Logger.getLogger("superx_" +
* getName()).setLevel(lev); lev = Level.SEVERE;
*
* try { if (props.getProperty("logLevelXML") != null) lev =
* Level.parse(props.getProperty("logLevelXML")); } catch
* (IllegalArgumentException e) { String msg = "Ungültiger Level für
* XMLLogger "; if (!this.getName().equals("default")) msg += "(Mandant :" +
* getName() + ") "; msg += " :" + props.getProperty("logLevelXML");
* System.out.println(msg); } Logger.getLogger("superx_" + getName() +
* "_xml").setLevel(lev);
*/
}
public static String getLogDir() {
String tomcat_home = System.getProperty("catalina.home"); //tomcat 4
// and 5
if (tomcat_home == null)
tomcat_home = System.getProperty("tomcat.home"); //tomcat 3.x
if (tomcat_home == null)
tomcat_home = "/home/superx/webserver/tomcat";
return tomcat_home + "/logs";
}
public Properties getProperties() {
return props;
}
private void readPropertiesAndUrl() throws Exception {
String propname = "db_" + nameNoAppendix + ".properties";
if (nameNoAppendix.equals("default"))
propname = "db.properties";
java.net.URL url = MemtextPool.class.getProtectionDomain()
.getCodeSource().getLocation();
File myJar = new File(url.getFile());
File myPath = new File(myJar.getParent());
String pfad = myPath.getParent() + System.getProperty("file.separator");
if (subpath != null)
pfad += subpath + System.getProperty("file.separator");
props = PropsReader.prepareProps(new File(pfad + propname));
int i = 1;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void close() throws SQLException {
PoolingDriver driver = (PoolingDriver) DriverManager
.getDriver("jdbc:apache:commons:dbcp:");
driver.closePool(this.getName());
}
public Connection getConnection() throws SQLException {
return DriverManager.getConnection("jdbc:apache:commons:dbcp:"
+ this.getName());
}
public void init() throws TransformerConfigurationException,
KeyParentEqualException, SQLException, DBServletException {
}
public void clearLogFiles() throws IOException {
}
private void initDSAHandler() throws DBServletException {
//privateKey wird ggfs. im Konstruktur bei Connection-Test, public key
// aus properties eingelesen
if (privateKeyEncoded == null)
throw new IllegalStateException(
"privatekey war null - properties-table auf Eintrag überprüfen");
if (publicKeyEncoded == null)
throw new IllegalStateException(
"publickey war null - properties-table prüfen");
try {
dsaHandler = new DSAHandler(privateKeyEncoded, publicKeyEncoded);
} catch (Exception e) {
throw new DBServletException(e.toString());
}
}
public boolean hasDSAHandler() {
return dsaHandler != null;
}
public boolean verifiy(String data, String signature)
throws InvalidKeyException, NoSuchAlgorithmException,
InvalidKeySpecException, SignatureException {
if (dsaHandler == null)
throw new IllegalStateException(
"DSAHandler ist null, public und private key definition prüfen");
return dsaHandler.verify(data, signature);
}
public String getPrivateKey() {
return privateKeyEncoded;
}
}
//Created on 04.11.2004 at 20:18:11 as SxPool

197
src/de/memtext/db/MemtextPools.java

@ -0,0 +1,197 @@
package de.memtext.db;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Iterator;
import javax.xml.transform.TransformerConfigurationException;
import org.apache.commons.dbcp.PoolingDriver;
import de.memtext.baseobjects.coll.NamedObjectSet;
import de.memtext.tree.KeyParentEqualException;
public class MemtextPools extends NamedObjectSet {
private NamedObjectSet pools = new NamedObjectSet();
public MemtextPools() {
super();
}
public synchronized Connection getConnection(String poolname)
throws SQLException {
if (pools.size() == 0)
throw new IllegalStateException("Kein ConnectionPool gefunden.");
if (!pools.containsItemWithName(poolname))
throw new SQLException("Kein ConnectionPool für Mandant:"
+ poolname + " gefunden");
String pooldrv = "jdbc:apache:commons:dbcp:" + poolname;
if (DriverManager.getDriver(pooldrv) == null) {
String msg = "Kein ConnectionPool gefunden ";
if (!poolname.equals("default"))
msg += " für Mandant " + poolname;
throw new SQLException(msg);
}
return DriverManager.getConnection(pooldrv);
}
public MemtextPool get(String poolname) {
if (!pools.containsItemWithName(poolname))
throw new IllegalStateException("Kein ConnectionPool (" + poolname
+ ") vorhanden");
return (MemtextPool) pools.getByName(poolname);
}
/* void initDefaultOnly() throws SQLException, IOException,
DBServletException {
pools.add(new MemtextPool("default"));
}
*/
/**
* wenn mehrfach benutzt wird (ConnectionPools für SuperX und Joolap)
* mind ein sollte namensappendix haben, damit unterscheidbar -
* sonst wird z.B. Pool für joolap "default" von später erzeugten Pool für superx "default"
* überschrieben!
*/
public void init(String subpath,Class poolclass, String nameAppendix) throws SQLException, IOException,
DBServletException {
if (nameAppendix==null) nameAppendix="";
Class[] params = new Class[2];
params[0] = String.class;
params[1] = String.class;
Constructor constructor;
try {
constructor = poolclass.getConstructor(params);
String db_extfile = "mandanten.cfg";
if (db_extfile.indexOf(File.separator) == -1) {
java.net.URL url = MemtextPools.class.getProtectionDomain()
.getCodeSource().getLocation();
File myJar = new File(url.getFile());
File myPath = new File(myJar.getParent());
String pfad = myPath.getParent();
if (subpath!=null) pfad+=File.separator+subpath;
db_extfile = pfad + File.separator+db_extfile; ;
}
File f = new File(db_extfile);
if (!f.exists()) {
//einfach nur normale db.properties (default)
System.out.print("Aufbau Datenbank-ConnectionPool");
Object[] args = new Object[2];
args[0] = "default";//Appendix hängt JoolapPool an
args[1] = subpath;
MemtextPool connectionPool = (MemtextPool) constructor.newInstance(args);
System.out.println(" OK");
System.out.println(" public/private key "+(connectionPool.hasDSAHandler()?" aktiv ":" nicht aktiv"));
pools.add(connectionPool);
} else { //mehrereMandanten
FileReader fr = new FileReader(f);
BufferedReader bfr = new BufferedReader(fr);
String line;
while ((line = bfr.readLine()) != null) {
System.out.print("Aufbau Datenbank-ConnectionPool für "
+ line);
Object[] args = new Object[2];
args[0] = line;//Appendix hängt JoolapPool an
args[1] = subpath;
MemtextPool connectionPool = (MemtextPool) constructor.newInstance(args);
System.out.println("OK");
System.out.println(" public/private key"+(connectionPool.hasDSAHandler()?" aktiv ":" nicht aktiv"));
pools.add(connectionPool);
}
bfr.close();
fr.close();
}
} catch (SecurityException e) {
e.printStackTrace();
throw new DBServletException(e.toString());
} catch (NoSuchMethodException e) {
e.printStackTrace();
throw new DBServletException(e.toString());
} catch (IllegalArgumentException e) {
e.printStackTrace();
throw new DBServletException(e.toString());
} catch (InstantiationException e) {
e.printStackTrace();
throw new DBServletException(e.toString());
} catch (IllegalAccessException e) {
e.printStackTrace();
throw new DBServletException(e.toString());
} catch (InvocationTargetException e) {
e.printStackTrace();
throw new DBServletException(e.toString());
}
}
/**
* Destroys all ConnectionPools
*
* @throws Exception
*/
public void closeAll() throws Exception {
for (Iterator it = pools.iterator(); it.hasNext();) {
MemtextPool pool = (MemtextPool) it.next();
pool.close();
}
}
public void main(String args[]) {
try {
init("xx",MemtextPool.class, null);
} catch (Exception e) {
e.printStackTrace();
}
int i = 1;
}
public void invalidate(String poolname, Connection con)
throws DBServletException {
if (!pools.containsItemWithName(poolname))
throw new DBServletException(
"Kann Connection nicht invalidieren - kein ConnectionPool "
+ poolname + " gefunden.");
try {
PoolingDriver driver = (PoolingDriver) DriverManager
.getDriver("jdbc:apache:commons:dbcp:");
//driver.invalidateConnection(con);
driver.getConnectionPool(poolname).invalidateObject(con);
} catch (Exception e) {
e.printStackTrace();
throw new DBServletException("Invalidating connection failed -" + e);
}
}
public void resetAllPools()
throws TransformerConfigurationException, KeyParentEqualException,
SQLException, DBServletException {
for (Iterator it = pools.iterator(); it.hasNext();) {
MemtextPool aPool = (MemtextPool) it.next();
aPool.init();
}
}
public void clearLogFiles() throws IOException {
for (Iterator it = pools.iterator(); it.hasNext();) {
MemtextPool aPool = (MemtextPool) it.next();
aPool.clearLogFiles();
}
}
}
//Created on 04.11.2004 at 20:18:11 als SxPools

1
src/de/memtext/db/NichtAngemeldetException.java

@ -1,5 +1,4 @@
package de.memtext.db; package de.memtext.db;
public class NichtAngemeldetException extends Exception { public class NichtAngemeldetException extends Exception {
public NichtAngemeldetException() { public NichtAngemeldetException() {

161
src/de/memtext/db/ProcedureSql.java

@ -1,7 +1,6 @@
package de.memtext.db; package de.memtext.db;
import de.memtext.util.StringUtils; import de.memtext.util.StringUtils;
/** /**
* Hilfsklasse zum Erstellen von Prozeduraufrüfen für verschd. * Hilfsklasse zum Erstellen von Prozeduraufrüfen für verschd.
* Datenbanken. * Datenbanken.
@ -15,85 +14,87 @@ import de.memtext.util.StringUtils;
*/ */
public class ProcedureSql { public class ProcedureSql {
private DB dbsystem; private DB dbsystem;
private boolean isAddPossible = true,isNameSet, isFinished;
private boolean isAddPossible = true, isNameSet, isFinished; private String finalSelect = "";
private String finalSelect = ""; private StringBuffer result = new StringBuffer();
private StringBuffer result = new StringBuffer(); public ProcedureSql(DB db) {
this.dbsystem = db;
public ProcedureSql(DB db) { if (dbsystem.equals(DB.INFORMIX))
this.dbsystem = db; result.append("execute procedure ");
if (dbsystem.equals(DB.INFORMIX)) result.append("execute procedure "); if (dbsystem.equals(DB.POSTGRES))
if (dbsystem.equals(DB.POSTGRES)) result.append("select "); result.append("select ");
} }
public ProcedureSql(DB dbsystem, String procname) { public ProcedureSql(DB dbsystem, String procname) {
this(dbsystem); this(dbsystem);
result.append(procname + ("(")); result.append(procname + ("("));
isNameSet = true; isNameSet=true;
} }
public void setName(String procName) {
public void setName(String procName) { if (isNameSet)throw new IllegalStateException("Name wurde schon gesetzt");
if (isNameSet) throw new IllegalStateException("Name wurde schon gesetzt"); result.append(procName+("("));
result.append(procName + ("(")); isNameSet=true;
isNameSet = true; }
} public void addParam(String param) {
if (!isAddPossible)
public void addParam(String param) { throw new IllegalStateException("kann keine Parameter hinzufügen, vielleicht wurde getFinishedCall schon aufgerufen");
if (!isAddPossible) throw new IllegalStateException("kann keine Parameter hinzufügen, vielleicht wurde getFinishedCall schon aufgerufen"); result.append(param + ",");
result.append(param + ","); }
} public void addDateParam(String param) {
if (!isAddPossible)
public void addDateParam(String param) { throw new IllegalStateException("kann keine Parameter hinzufügen, vielleicht wurde getFinishedCall schon aufgerufen");
if (!isAddPossible) throw new IllegalStateException("kann keine Parameter hinzufügen, vielleicht wurde getFinishedCall schon aufgerufen");
if (dbsystem.equals(DB.INFORMIX))
if (dbsystem.equals(DB.INFORMIX)) result.append("date"); result.append("date");
if (dbsystem.equals(DB.POSTGRES)) result.append("date_val"); if (dbsystem.equals(DB.POSTGRES))
result.append("('" + param + "'),"); result.append("date_val");
} result.append("('" + param + "'),");
}
public void setFinalSelect(String sel) { public void setFinalSelect(String sel) {
finalSelect = sel; finalSelect = sel;
} }
public String getFinishedCall() { public String getFinishedCall() {
if (!isFinished) finish(); if (!isFinished)
return result.toString(); finish();
} return result.toString();
}
private void finish() {
addClosingBracket(); private void finish() {
result.append(finalSelect); addClosingBracket();
isAddPossible = false; result.append(finalSelect);
isFinished = true; isAddPossible = false;
} isFinished = true;
}
private void addClosingBracket() {
char lc = result.charAt(result.length() - 1);// StringUtils.getLastChar(result); private void addClosingBracket() {
if (lc == ',') StringUtils.deleteLastChar(result); char lc=result.charAt(result.length()-1);// StringUtils.getLastChar(result);
result.append(");"); if (lc==',')
} StringUtils.deleteLastChar(result);
result.append(");");
public void addParam(Integer integer) { }
addParam(integer.toString());
} public void addParam(Integer integer) {
addParam(integer.toString());
public void addParam(int in) { }
addParam(Integer.valueOf(in).toString());
} public void addParam(int in) {
addParam(new Integer(in).toString());
public void addParam(Object param) { }
addParam(param.toString());
} public void addParam(Object param) {
addParam(param.toString());
public static void main(String args[]) { }
ProcedureSql p = new ProcedureSql(DB.POSTGRES, "test");
p.addParam(23); public static void main(String args[]) {
System.out.println(p.getFinishedCall()); ProcedureSql p=new ProcedureSql(DB.POSTGRES,"test");
} p.addParam(23);
System.out.println(p.getFinishedCall());
}
} }

14
src/de/memtext/db/PropDescriptor.java

@ -1,23 +1,19 @@
package de.memtext.db; package de.memtext.db;
import de.memtext.baseobjects.NamedIdObject; import de.memtext.baseobjects.NamedIdObject;
/** /**
* Beschreibt eine (zusätzliche) in der Datenbank hinterlegt Eigenschaft. * Beschreibt eine (zusätzliche) in der Datenbank hinterlegt Eigenschaft.
* (z.B. Accident meister) * (z.B. Accident meister)
*/ */
public class PropDescriptor extends NamedIdObject { public class PropDescriptor extends NamedIdObject {
//wie heißt die Spalte in der DB //wie heißt die Spalte in der DB
private String colname; private String colname;
//bei Combobox sql für quelle select key,name from xx //bei Combobox sql für quelle select key,name from xx
private String quelle; private String quelle;
//soll auf dem Bildschirm sichtbar sein //soll auf dem Bildschirm sichtbar sein
private boolean isVisible; private boolean isVisible;
private String defaultkey; private String defaultkey;
private int sortnr; private int sortnr;
@ -26,7 +22,7 @@ public class PropDescriptor extends NamedIdObject {
} }
public PropDescriptor(Object id, String name) { public PropDescriptor(Object id, String name) {
super(id, name); super(id,name);
} }
public String getColname() { public String getColname() {
@ -64,13 +60,11 @@ public class PropDescriptor extends NamedIdObject {
public int getSortnr() { public int getSortnr() {
return sortnr; return sortnr;
} }
public void setSortnr(int sortnr) { public void setSortnr(int sortnr) {
this.sortnr = sortnr; this.sortnr = sortnr;
} }
public String toString()
@Override {
public String toString() {
return getName(); return getName();
} }
} }

60
src/de/memtext/db/PropsReader.java

@ -1,49 +1,79 @@
package de.memtext.db; package de.memtext.db;
import static de.superx.servlet.SxSQL_Server.DEFAULT_MANDANTEN_ID;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import de.memtext.util.CryptUtils; import de.memtext.util.CryptUtils;
public class PropsReader { public class PropsReader {
private static byte key[] = { (byte) 255, (byte) 221, (byte) 127, (byte) 109, (byte) 129 }; private static byte key[] = { (byte) 255, (byte) 221, (byte) 127,
(byte) 109, (byte) 129 };
/* private static int keyLength = key.length;
* /*
* 28.10.08 EInfache Verschlüsselungsmethode wird nicht mehr unterstützt *
*/ * 28.10.08 EInfache Verschlüsselungsmethode wird nicht mehr unterstützt
*/
public static String check(String mandantenID, String d) throws Exception { public static String check(String mandantenID, String d) throws Exception {
String result = ""; String result = "";
// Logger.getLogger("superx_" + mandantenID).log(Level.FINEST,
// "Verschlüsseltes Passwort " + d);
if (d.startsWith("sx_des")) { if (d.startsWith("sx_des")) {
result = CryptUtils.decryptStringDES(d.substring(6)); result = CryptUtils.decryptStringDES(d.substring(6));
} else { }
result = d; else {
result=d;
/* try {
byte[] tmp;
tmp = d.getBytes();
int size = (byte) (tmp[0] ^ key[0 % keyLength]);
int index = (byte) (tmp[1] ^ key[1 % keyLength]);
byte de[] = new byte[size];
for (int i = index; i < (size + index); i++) {
de[i - index] = (byte) (tmp[i] ^ key[i % keyLength]);
}
result = new String(de);
} catch (Exception e) {
throw new DBServletException(
"Konnte Passwort nicht entschlüsseln (altes Verfahren). Bitte mit propadmin.x prüfen.\n"
+ e);
}*/
} }
return result; return result;
} }
public static Properties prepareProps(File propfile) throws IOException, FileNotFoundException, Exception { public static Properties prepareProps(File propfile) throws IOException,
FileNotFoundException, Exception {
Properties props = new Properties(); Properties props = new Properties();
if (!propfile.exists()) { if (!propfile.exists()) {
throw new IOException("Datei nicht gefunden: " + propfile); throw new IOException("Datei nicht gefunden: " + propfile);
} }
InputStream is = new FileInputStream(propfile); InputStream is = new FileInputStream(propfile);
props.load(is);
is.close(); if (is != null) {
props.load(is);
is.close();
} else {
throw new IOException("cannot open " + propfile);
}
String mandantenID = props.getProperty("MandantenID"); String mandantenID = props.getProperty("MandantenID");
if (mandantenID == null) mandantenID = DEFAULT_MANDANTEN_ID; if (mandantenID == null)
mandantenID = "default";
props.put("user", props.getProperty("connectionName")); props.put("user", props.getProperty("connectionName"));
props.put("password", check(mandantenID, props.getProperty("connectionPassword"))); props.put("password", check(mandantenID, props
.getProperty("connectionPassword")));
if (props.getProperty("driverName").indexOf("postgres") > -1) { if (props.getProperty("driverName").indexOf("postgres") > -1) {
props.put("charSet", "Latin-1"); props.put("charSet", "Latin-1");
props.put("DateStyle", "German, DMY"); props.put("DateStyle", "German, DMY");
// props.put("DateStyle", "ISO, DMY");
} }
if (props.getProperty("driverName").indexOf("informix") > -1) if (props.getProperty("driverName").indexOf("informix") > -1)

169
src/de/memtext/db/RestrictionCollector.java

@ -1,97 +1,90 @@
package de.memtext.db; package de.memtext.db;
/** /**
* collects restrictions for sql-clauses, manages where and * collects restrictions for sql-clauses, manages where and
* and what to delete * and what to delete
* take care of inital where yourself * take care of inital where yourself
*/ */
public class RestrictionCollector { public class RestrictionCollector {
private StringBuffer restrict = new StringBuffer(); private StringBuffer restrict = new StringBuffer();
private int count = 0; private int count=0;
public RestrictionCollector() {
public RestrictionCollector() { }
} public RestrictionCollector(String restriction) {
restrict.append(restriction);
public RestrictionCollector(String restriction) { count = 1;
restrict.append(restriction);
count = 1; }
public boolean isSomethingAdded()
} {
return count>0;
public boolean isSomethingAdded() { }
return count > 0; public void addAndRestriction(StringBuffer restriction) {
} addAndRestriction(restriction.toString());
}
public void addAndRestriction(StringBuffer restriction) { public void addAndRestriction(String restriction) {
addAndRestriction(restriction.toString()); if (restriction==null||restriction.length()<3)
} throw new IllegalArgumentException("Not OK:"+restriction);
boolean isNewlineAtStart=restriction.startsWith("\n");
public void addAndRestriction(String restriction) { restriction = restriction.trim();
if (restriction == null || restriction.length() < 3) throw new IllegalArgumentException("Not OK:" + restriction); if (isNewlineAtStart) restriction="\n"+restriction;
boolean isNewlineAtStart = restriction.startsWith("\n"); if (restriction.substring(0, 3).equalsIgnoreCase("and"))
restriction = restriction.trim(); restriction = restriction.substring(3);
if (isNewlineAtStart) restriction = "\n" + restriction; if (count>0)
if (restriction.substring(0, 3).equalsIgnoreCase("and")) restriction = restriction.substring(3); restrict.append(" and " + restriction + " ");
if (count > 0) else
restrict.append(" and " + restriction + " "); restrict.append(restriction + " ");
else count++;
restrict.append(restriction + " "); }
count++;
} public void addOrRestriction(StringBuffer restriction) {
addOrRestriction(restriction.toString());
public void addOrRestriction(StringBuffer restriction) { }
addOrRestriction(restriction.toString()); public void addOrRestriction(String restriction) {
} if (restriction==null||restriction.length()<3)
throw new IllegalArgumentException("Not OK:"+restriction);
public void addOrRestriction(String restriction) {
if (restriction == null || restriction.length() < 3) throw new IllegalArgumentException("Not OK:" + restriction); restriction = restriction.trim();
if (restriction.substring(0, 3).equalsIgnoreCase("or "))
restriction = restriction.trim(); restriction = restriction.substring(3);
if (restriction.substring(0, 3).equalsIgnoreCase("or ")) restriction = restriction.substring(3);
if (count>0)
if (count > 0) restrict.append(" or " + restriction + " ");
restrict.append(" or " + restriction + " "); else
else restrict.append(restriction + " ");
restrict.append(restriction + " "); count++;
count++; }
} public void addOrRestriction(RestrictionCollector collector) {
addOrRestriction(collector.toString());
public void addOrRestriction(RestrictionCollector collector) { }
addOrRestriction(collector.toString()); public String toString() {
} if (count>0)
return restrict.toString();
@Override else
public String toString() { return "";
if (count > 0) }
return restrict.toString(); public String toStringInclusiveWhere()
else {
return ""; if (count>0)
} return " where "+restrict;
else
public String toStringInclusiveWhere() { return "";
if (count > 0) }
return " where " + restrict; public int getArgumentCount()
else {
return ""; return count;
} }
public void addAndRestriction(RestrictionCollector collector) {
public int getArgumentCount() { if (collector.getArgumentCount()>1)
return count; addAndRestriction( collector.toString());
} else
addAndRestriction( collector.toString() );
public void addAndRestriction(RestrictionCollector collector) { }
if (collector.getArgumentCount() > 1) public static void main(String[] args) {
addAndRestriction(collector.toString()); RestrictionCollector r = new RestrictionCollector();
else r.addAndRestriction(" AND 1=1");
addAndRestriction(collector.toString()); r.addAndRestriction("2=2");
} System.out.println(r);
}
public static void main(String[] args) {
RestrictionCollector r = new RestrictionCollector();
r.addAndRestriction(" AND 1=1");
r.addAndRestriction("2=2");
System.out.println(r);
}
} }
// Created on 23.07.2003 // Created on 23.07.2003

29
src/de/memtext/db/SampleApp.java

@ -43,30 +43,28 @@ import javax.swing.JOptionPane;
public class SampleApp extends JFrame { public class SampleApp extends JFrame {
private Connection con = null; private Connection con = null;
private String path = ""; // null , "" or "." for current directory private String path = ""; // null , "" or "." for current directory
private String dbname = "testing"; private String dbname = "testing";
public SampleApp() throws ClassNotFoundException, SQLException, IOException { public SampleApp() throws ClassNotFoundException, SQLException, IOException {
super("SampleApp"); super("SampleApp");
initDb(); initDb();
JLabel lbl = new JLabel("got a connection to " + con.getMetaData().getURL()); JLabel lbl = new JLabel("got a connection to "
+ con.getMetaData().getURL());
this.getContentPane().add(lbl); this.getContentPane().add(lbl);
this.setSize(600, 400); this.setSize(600, 400);
addWindowListener(new WindowAdapter() { addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) { public void windowClosing(WindowEvent we) {
try { try {
String url = con.getMetaData().getURL(); String url=con.getMetaData().getURL();
Statement stmt = con.createStatement(); Statement stmt= con.createStatement();
stmt.execute("shutdown"); stmt.execute("shutdown");
stmt.close(); stmt.close();
con.close(); con.close();
//delete all temporary files that may exists //delete all temporary files that may exists
HsqlStandaloneMgr.deleteTmpFiles(url, path, dbname); HsqlStandaloneMgr.deleteTmpFiles( url,path, dbname);
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -76,14 +74,16 @@ public class SampleApp extends JFrame {
} }
private void initDb() throws ClassNotFoundException, SQLException, IOException { private void initDb() throws ClassNotFoundException, SQLException,
IOException {
if (!HsqlStandaloneMgr.isDatabaseOpen(path, dbname)) { if (!HsqlStandaloneMgr.isDatabaseOpen(path, dbname)) {
//if the database isn't open yet, we just open a regular connection //if the database isn't open yet, we just open a regular connection
//the system username is written to a special properties file //the system username is written to a special properties file
con = HsqlStandaloneMgr.getConnection(path, dbname, "sa", ""); con = HsqlStandaloneMgr.getConnection(path, dbname, "sa", "");
Statement stmt = con.createStatement(); Statement stmt = con.createStatement();
stmt.execute("drop table test if exists;create table test( col1 integer);insert into test values(1);checkpoint;"); stmt
.execute("drop table test if exists;create table test( col1 integer);insert into test values(1);checkpoint;");
stmt.close(); stmt.close();
} else } else
// the database is already open // the database is already open
@ -92,11 +92,14 @@ public class SampleApp extends JFrame {
//if not, all changes to the database will be lost after closing //if not, all changes to the database will be lost after closing
// the connection // the connection
boolean isReadOnlyModeWanted = true; boolean isReadOnlyModeWanted = true;
int result = HsqlStandaloneMgr.askUser(this, path, dbname, isReadOnlyModeWanted); int result = HsqlStandaloneMgr.askUser(this, path, dbname,
isReadOnlyModeWanted);
if (result == JOptionPane.YES_OPTION) { if (result == JOptionPane.YES_OPTION) {
con = HsqlStandaloneMgr.getTmpConnection(this, path, dbname, "sa", "", isReadOnlyModeWanted); con = HsqlStandaloneMgr.getTmpConnection(this, path, dbname,
} else { "sa", "", isReadOnlyModeWanted);
// opening of temp. copy not wanted } else
{
// opening of temp. copy not wanted
System.exit(0); System.exit(0);
} }
} }

9
src/de/memtext/db/SchemaReader.java

@ -7,7 +7,7 @@ import java.sql.DatabaseMetaData;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import org.apache.commons.io.FileUtils; import de.memtext.util.StringUtils;
public class SchemaReader { public class SchemaReader {
@ -17,7 +17,7 @@ public class SchemaReader {
System.exit(1); System.exit(1);
} }
try { try {
Connection con = ConnectionCreator.getConnectionCryptPassword(args[0], "driverName", "connectionURL", "connectionName", "connectionPassword"); Connection con = ConnectionCreator.getConnectionCryptPassword(args[0],"driverName","connectionURL","connectionName","connectionPassword");
DatabaseMetaData md = con.getMetaData(); DatabaseMetaData md = con.getMetaData();
ResultSet myTables = md.getTables(null, null, null, null); ResultSet myTables = md.getTables(null, null, null, null);
StringBuffer result = new StringBuffer(); StringBuffer result = new StringBuffer();
@ -27,12 +27,13 @@ public class SchemaReader {
result.append("TABLE " + tabname + "\n"); result.append("TABLE " + tabname + "\n");
ResultSet cols = md.getColumns(null, null, tabname, null); ResultSet cols = md.getColumns(null, null, tabname, null);
while (cols.next()) { while (cols.next()) {
result.append(cols.getString(4) + ":" + cols.getObject(5) + "\n"); result.append(cols.getString(4) + ":"
+ cols.getObject(5) + "\n");
} }
result.append("----\n"); result.append("----\n");
} }
} }
FileUtils.writeStringToFile(new File("schema.txt"), result.toString()); StringUtils.write(new File("schema.txt"),result.toString());
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();

439
src/de/memtext/db/ValueRandomizer.java

@ -1,5 +1,4 @@
package de.memtext.db; package de.memtext.db;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.FileWriter; import java.io.FileWriter;
import java.sql.Connection; import java.sql.Connection;
@ -10,7 +9,6 @@ import java.sql.Statement;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.Random; import java.util.Random;
import java.util.Vector; import java.util.Vector;
/** /**
* Randomizes values in a database. * Randomizes values in a database.
* Reads all values of a given table column (select distinct x from..) and * Reads all values of a given table column (select distinct x from..) and
@ -21,197 +19,248 @@ import java.util.Vector;
* to console, not performed * to console, not performed
* */ * */
public class ValueRandomizer { public class ValueRandomizer {
//private static String driver = "org.hsqldb.jdbcDriver"; //private static String driver = "org.hsqldb.jdbcDriver";
private static String driver = "org.postgresql.Driver"; private static String driver = "org.postgresql.Driver";
//private static String dbUrl = "jdbc:hsqldb:hsql://localhost:9999";
//private static String dbUrl = "jdbc:hsqldb:hsql://localhost:9999"; private static String dbUrl = "jdbc:postgresql://localhost:5432/superx";
private static String dbUrl = "jdbc:postgresql://localhost:5432/superx"; private static String username = "superx"; //"joolap";
private static String password = ""; //"loopja3000";
private static String username = "superx"; //"joolap"; private static String tablename = "cob_busa";
private static String colname = "betrag"; //"value";
private static String password = ""; //"loopja3000"; private static String datenart = "DOUBLE"; //or "INTEGER";
private static String tablename = "cob_busa"; private static double minFactor = 0.6;
private static double maxFactor = 1.8;
private static String colname = "betrag"; //"value";
private static boolean printOutOnly = false;
private static String datenart = "DOUBLE"; //or "INTEGER"; private static Statement stat;
private static Random r = new Random();
private static double minFactor = 0.6; public static void main(String args[]) {
private static double maxFactor = 1.8; try {
Class.forName(driver);
private static boolean printOutOnly = false; Connection conn;
System.out.println("establishing connection to " + dbUrl);
private static Statement stat; conn = DriverManager.getConnection(dbUrl, username, password);
stat = conn.createStatement();
private static Random r = new Random(); System.out.println("done.");
out();
public static void main(String args[]) { stat.close();
conn.close();
try { System.exit(-1);
Class.forName(driver);
Connection conn;
System.out.println("establishing connection to " + dbUrl); //alle werte einlesen
conn = DriverManager.getConnection(dbUrl, username, password); Vector werte = readDistinctValues();
stat = conn.createStatement(); if (datenart.toUpperCase().equalsIgnoreCase("DOUBLE")) {
System.out.println("done."); //massiveRandomizeDouble(werte);
out(); randomize(werte);
stat.close(); } else //integer
conn.close(); {
System.exit(-1); massiveRandomizeInteger(werte);
}
//alle werte einlesen System.out.println("Randomizierung erfolgreich beendet");
Vector werte = readDistinctValues(); } catch (Exception e) {
if (datenart.toUpperCase().equalsIgnoreCase("DOUBLE")) { System.out.println(e.toString());
//massiveRandomizeDouble(werte); System.exit(0);
randomize(werte); }
} else //integer
{ }
massiveRandomizeInteger(werte); /**
} * randomizes in categories of values
* only for double
System.out.println("Randomizierung erfolgreich beendet"); * @param werte
} catch (Exception e) { */
System.out.println(e.toString()); private static void randomize(Vector werte) {
System.exit(0); int categories = 15;
} int valuesPerCategory = (int) werte.size() / categories;
StringBuffer updates = new StringBuffer();
} float limit = 0, limit2;
for (int i = 1; i < categories; i++) {
/** limit =
* randomizes in categories of values (float) ((Double) werte.get(i * valuesPerCategory))
* only for double .doubleValue();
* @param werte updates.append(
*/ "update "
private static void randomize(Vector werte) { + tablename
int categories = 15; + " set "
int valuesPerCategory = (int) werte.size() / categories; + colname
StringBuffer updates = new StringBuffer(); + "="
float limit = 0, limit2; + colname
for (int i = 1; i < categories; i++) { + "*"
limit = (float) ((Double) werte.get(i * valuesPerCategory)).doubleValue(); + getRndFactor()
updates.append("update " + tablename + " set " + colname + "=" + colname + "*" + getRndFactor() + " where " + colname + ">" + limit); + " where "
if (i > 1) { + colname
limit2 = (float) ((Double) werte.get((i - 1) * valuesPerCategory)).doubleValue(); + ">"
updates.append(" and " + colname + "<" + limit2); + limit);
} if (i > 1) {
updates.append(";\n"); limit2 =
} (float) ((Double) werte.get((i - 1) * valuesPerCategory))
limit = (float) ((Double) werte.get((categories - 1) * valuesPerCategory)).doubleValue(); .doubleValue();
updates.append("update " + tablename + " set " + colname + "=" + colname + "*" + getRndFactor() + " where " + colname + "<" + limit + ";"); updates.append(" and " + colname + "<" + limit2);
}
System.out.println(updates); updates.append(";\n");
} }
limit =
/** (float) ((Double) werte.get((categories - 1) * valuesPerCategory))
* * multiplies all occurences of a single value (e.g. 150) with a factor between .doubleValue();
* minFactor and maxFactor (e.g. 150*1.1 -> all entries with 150 become 165) updates.append(
"update "
* @param werte + tablename
* @throws SQLException + " set "
*/ + colname
private static void massiveRandomizeInteger(Vector werte) throws SQLException { + "="
Integer einWert; + colname
String upd = null; + "*"
for (Enumeration en = werte.elements(); en.hasMoreElements();) { + getRndFactor()
einWert = (Integer) en.nextElement(); + " where "
int neuerwert = (int) (einWert.intValue() * getRndFactor()); + colname
upd = "update " + tablename + " set " + colname + "=" + neuerwert + " where " + colname + "=" + einWert.toString() + ";"; + "<"
+ limit
if (printOutOnly) + ";");
System.out.println(upd);
else System.out.println(updates);
stat.executeUpdate(upd); }
} /**
* * multiplies all occurences of a single value (e.g. 150) with a factor between
} * minFactor and maxFactor (e.g. 150*1.1 -> all entries with 150 become 165)
/** * @param werte
* * multiplies all occurences of a single value (e.g. 150) with a factor between * @throws SQLException
* minFactor and maxFactor (e.g. 150*1.1 -> all entries with 150 become 165) */
private static void massiveRandomizeInteger(Vector werte)
* @param werte throws SQLException {
* @throws SQLException Integer einWert;
*/ String upd = null;
private static void massiveRandomizeDouble(Vector werte) throws SQLException { for (Enumeration en = werte.elements(); en.hasMoreElements();) {
Double einWert; einWert = (Integer) en.nextElement();
double zufallswert; int neuerwert = (int) (einWert.intValue() * getRndFactor());
String upd; upd =
int i = 0; "update "
int count = werte.size(); + tablename
for (Enumeration en = werte.elements(); en.hasMoreElements();) { + " set "
einWert = (Double) en.nextElement(); + colname
i++; + "="
zufallswert = einWert.doubleValue() * getRndFactor(); + neuerwert
upd = "update " + tablename + " set " + colname + "=" + zufallswert + " where " + colname + "=" + einWert + ";"; + " where "
if (printOutOnly) + colname
System.out.println(upd); + "="
else { + einWert.toString()
stat.executeUpdate(upd); + ";";
if (i % 20 == 0) System.out.println("Done " + i + " updates of " + count);
} if (printOutOnly)
System.out.println(upd);
} else
} stat.executeUpdate(upd);
}
private static float getRndFactor() {
double rnd = Math.abs(r.nextDouble()); }
while (rnd < minFactor) /**
rnd += minFactor; * * multiplies all occurences of a single value (e.g. 150) with a factor between
while (rnd > maxFactor) * minFactor and maxFactor (e.g. 150*1.1 -> all entries with 150 become 165)
rnd -= 0.05;
return (float) rnd; * @param werte
} * @throws SQLException
*/
private static Vector readDistinctValues() throws SQLException { private static void massiveRandomizeDouble(Vector werte)
Vector werte = new Vector(); throws SQLException {
ResultSet rs = null; Double einWert;
Object item; double zufallswert;
System.out.println("Alle werte einlesen:" + "select distinct " + colname + " from " + tablename + " order by 1 DESC"); String upd;
int i = 0;
rs = stat.executeQuery("select distinct " + colname + " from " + tablename + " order by " + colname + " DESC"); int count = werte.size();
while (rs.next()) { for (Enumeration en = werte.elements(); en.hasMoreElements();) {
item = rs.getObject(1); einWert = (Double) en.nextElement();
werte.add(item); i++;
} zufallswert = einWert.doubleValue() * getRndFactor();
rs.close(); upd =
return werte; "update "
} + tablename
+ " set "
private static void out() { + colname
try { + "="
FileWriter fw = new FileWriter("c:\\cygwin\\home\\superx\\cob_busa.unl"); + zufallswert
BufferedWriter bw = new BufferedWriter(fw); + " where "
StringBuffer buf = new StringBuffer(); + colname
+ "="
ResultSet rs = stat.executeQuery("select * from cob_busa"); + einWert
+ ";";
int cols = 20; if (printOutOnly)
String s; System.out.println(upd);
Object o; else {
while (rs.next()) { stat.executeUpdate(upd);
for (int i = 1; i <= cols; i++) { if (i % 20 == 0)
o = rs.getObject(i); System.out.println("Done " + i + " updates of " + count);
if (o == null) }
s = "";
else }
s = o.toString(); }
private static float getRndFactor() {
buf.append(s.trim() + "^"); double rnd = Math.abs(r.nextDouble());
} while (rnd < minFactor)
buf.append("^\n"); rnd += minFactor;
while (rnd > maxFactor)
} rnd -= 0.05;
rs.close(); return (float) rnd;
}
bw.write(buf.toString()); private static Vector readDistinctValues() throws SQLException {
bw.close(); Vector werte = new Vector();
fw.close(); ResultSet rs = null;
} catch (Exception e) { Object item;
e.printStackTrace(); System.out.println(
} "Alle werte einlesen:"
System.out.println("done"); + "select distinct "
} + colname
+ " from "
+ tablename
+ " order by 1 DESC");
rs =
stat.executeQuery(
"select distinct "
+ colname
+ " from "
+ tablename
+ " order by "
+ colname
+ " DESC");
while (rs.next()) {
item = rs.getObject(1);
werte.add(item);
}
rs.close();
return werte;
}
private static void out() {
try {
FileWriter fw =
new FileWriter("c:\\cygwin\\home\\superx\\cob_busa.unl");
BufferedWriter bw = new BufferedWriter(fw);
StringBuffer buf = new StringBuffer();
ResultSet rs = stat.executeQuery("select * from cob_busa");
int cols = 20;String s;Object o;
while (rs.next()) {
for (int i = 1; i <= cols; i++)
{o=rs.getObject(i);
if (o==null) s="";
else s=o.toString();
buf.append(s.trim() + "^");}
buf.append("^\n");
}
rs.close();
bw.write(buf.toString());
bw.close();
fw.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("done");
}
} }

100
src/de/memtext/db/dataexchange/MyRequest.java

@ -6,62 +6,64 @@ package de.memtext.db.dataexchange;
* @author: * @author:
*/ */
public class MyRequest implements java.io.Serializable { public class MyRequest implements java.io.Serializable {
static final long serialVersionUID = -2L; static final long serialVersionUID = -2L;
static final int NORMAL=1;
static final int NORMAL = 1; static final int EXPECT_ONE_UPDATE=2;
static final int EXPECT_ONE_UPDATE = 2; private String sql;
private String name;
private String sql; private Object[] params;
private int type;
private String name; public MyRequest(String name,String sql,Object[] params)
{
private Object[] params; this(name,sql,params,NORMAL);
}
private int type; public MyRequest(String name,String sql,Object[] params,int type)
{
public MyRequest(String name, String sql, Object[] params) { setName(name);
this(name, sql, params, NORMAL); setSql(sql);
} setParams(params);
setType(type);
public MyRequest(String name, String sql, Object[] params, int type) { }
setName(name);
setSql(sql);
setParams(params);
setType(type);
}
public int getType() {
return type;
}
public void setType(int type) { public int getType()
this.type = type; {
} return type;
}
public String getName() { public void setType(int type)
return name; {
} this.type=type;
}
public String getName()
{
return name;
}
public void setName(String name) { public void setName(String name)
this.name = name; {
} this.name=name;
}
public Object[] getParams() { public Object[] getParams()
return params; {
} return params;
}
public void setParams(Object[] params) { public void setParams(Object[] params)
this.params = params; {
} this.params=params;
}
public String getSql() { public String getSql()
return sql; {
} return sql;
}
public void setSql(String sql) { public void setSql(String sql)
this.sql = sql; {
} this.sql=sql;
}
} }

12
src/de/memtext/db/dataexchange/MyServletResponse.java

@ -1,7 +1,6 @@
package de.memtext.db.dataexchange; package de.memtext.db.dataexchange;
import java.util.Vector; import java.util.Vector;
/** /**
* Insert the type's description here. * Insert the type's description here.
* Creation date: (28.11.2002 19:25:34) * Creation date: (28.11.2002 19:25:34)
@ -9,13 +8,9 @@ import java.util.Vector;
*/ */
public class MyServletResponse implements java.io.Serializable { public class MyServletResponse implements java.io.Serializable {
static final long serialVersionUID = -3L; static final long serialVersionUID = -3L;
private Vector result; private Vector result;
private boolean OK; private boolean OK;
private Exception exception; private Exception exception;
private int updatedRowsCount; private int updatedRowsCount;
/** /**
@ -26,31 +21,24 @@ public class MyServletResponse implements java.io.Serializable {
this.OK = OK; this.OK = OK;
this.exception = exception; this.exception = exception;
} }
public Exception getException() { public Exception getException() {
return exception; return exception;
} }
public Vector getResult() { public Vector getResult() {
return result; return result;
} }
public boolean isOK() { public boolean isOK() {
return OK; return OK;
} }
public void setException(Exception exception) { public void setException(Exception exception) {
this.exception = exception; this.exception = exception;
} }
public void setOK(boolean OK) { public void setOK(boolean OK) {
this.OK = OK; this.OK = OK;
} }
public void setResult(Vector result) { public void setResult(Vector result) {
this.result = result; this.result = result;
} }
public int getUpdatedRowsCount() { public int getUpdatedRowsCount() {
return updatedRowsCount; return updatedRowsCount;
} }

59
src/de/memtext/dlg/AboutDialog.java

@ -12,34 +12,37 @@ import de.memtext.util.WindowUtils;
import de.memtext.widgets.VerticalBox; import de.memtext.widgets.VerticalBox;
public class AboutDialog extends OkDlg { public class AboutDialog extends OkDlg {
private JLabel infoLbl, homepageLabel; private JLabel infoLbl, homepageLabel;
public AboutDialog(
public AboutDialog(Frame parent, String title, String infoText, String homePageLink, final String homepageUrl) throws HeadlessException { Frame parent,
super(parent, title); String title,
infoLbl = new JLabel(infoText); String infoText,
homepageLabel = new JLabel("<html><u>" + homePageLink); String homePageLink,
homepageLabel.addMouseListener(new java.awt.event.MouseAdapter() { final String homepageUrl)
throws HeadlessException {
@Override super(parent, title);
public void mouseClicked(java.awt.event.MouseEvent evt) { infoLbl = new JLabel(infoText);
homepageLabel = new JLabel("<html><u>" + homePageLink);
try { homepageLabel.addMouseListener(new java.awt.event.MouseAdapter() {
BrowserLauncher.openURL(homepageUrl); public void mouseClicked(java.awt.event.MouseEvent evt) {
} catch (IOException e) {
e.printStackTrace(); try {
} BrowserLauncher.openURL(homepageUrl);
} } catch (IOException e) {
}); e.printStackTrace();
}
VerticalBox vbox = new VerticalBox(); }
vbox.addWithCenterAlignment(infoLbl); });
vbox.addWithCenterAlignment(homepageLabel);
setCenter(vbox); VerticalBox vbox = new VerticalBox();
pack(); vbox.addWithCenterAlignment(infoLbl);
Dimension size = this.getSize(); vbox.addWithCenterAlignment(homepageLabel);
setSize(size.width + 30, size.height + 30); setCenter(vbox);
WindowUtils.center(this); pack();
} Dimension size = this.getSize();
setSize(size.width + 30, size.height + 30);
WindowUtils.center(this);
}
} }

183
src/de/memtext/dlg/DialogWithExit.java

@ -13,94 +13,101 @@ import javax.swing.JDialog;
public class DialogWithExit extends JDialog { public class DialogWithExit extends JDialog {
public DialogWithExit() throws HeadlessException { public DialogWithExit() throws HeadlessException {
super(); super();
initMe(); initMe();
} }
public DialogWithExit(Frame owner) throws HeadlessException { public DialogWithExit(Frame owner) throws HeadlessException {
super(owner); super(owner);
initMe(); initMe();
} }
public DialogWithExit(Frame owner, boolean arg1) throws HeadlessException { public DialogWithExit(Frame owner, boolean arg1) throws HeadlessException {
super(owner, arg1); super(owner, arg1);
initMe(); initMe();
} }
public DialogWithExit(Frame owner, String arg1) throws HeadlessException { public DialogWithExit(Frame owner, String arg1) throws HeadlessException {
super(owner, arg1); super(owner, arg1);
initMe(); initMe();
} }
public DialogWithExit(Frame owner, String arg1, boolean arg2) throws HeadlessException { public DialogWithExit(Frame owner, String arg1, boolean arg2)
super(owner, arg1, arg2); throws HeadlessException {
initMe(); super(owner, arg1, arg2);
} initMe();
}
public DialogWithExit(Frame owner, String arg1, boolean arg2, GraphicsConfiguration arg3) {
super(owner, arg1, arg2, arg3); public DialogWithExit(
initMe(); Frame owner,
} String arg1,
boolean arg2,
public DialogWithExit(Dialog owner) throws HeadlessException { GraphicsConfiguration arg3) {
super(owner); super(owner, arg1, arg2, arg3);
initMe(); initMe();
} }
public DialogWithExit(Dialog owner, boolean arg1) throws HeadlessException { public DialogWithExit(Dialog owner) throws HeadlessException {
super(owner, arg1); super(owner);
initMe(); initMe();
} }
public DialogWithExit(Dialog owner, String arg1) throws HeadlessException { public DialogWithExit(Dialog owner, boolean arg1) throws HeadlessException {
super(owner, arg1); super(owner, arg1);
initMe(); initMe();
} }
public DialogWithExit(Dialog owner, String arg1, boolean arg2) throws HeadlessException { public DialogWithExit(Dialog owner, String arg1) throws HeadlessException {
super(owner, arg1, arg2); super(owner, arg1);
} initMe();
}
public DialogWithExit(Dialog owner, String arg1, boolean arg2, GraphicsConfiguration arg3) throws HeadlessException {
super(owner, arg1, arg2, arg3); public DialogWithExit(Dialog owner, String arg1, boolean arg2)
initMe(); throws HeadlessException {
} super(owner, arg1, arg2);
}
private void initMe() {
addWindowListener(new WindowAdapter() { public DialogWithExit(
@Override Dialog owner,
public void windowClosing(WindowEvent we) { String arg1,
exit(); boolean arg2,
} GraphicsConfiguration arg3)
}); throws HeadlessException {
} super(owner, arg1, arg2, arg3);
initMe();
/** }
* called if window is closed, does nothing by default, private void initMe(){
* subclasses can override addWindowListener(new WindowAdapter() {
* public void windowClosing(WindowEvent we) {
*/ exit();
protected void exit() { }
} });
}
//man könnte noch abfragen ob auch wirklich Borderlayout benutzt /**
//wird * called if window is closed, does nothing by default,
/** * subclasses can override
* installs a component in the center of the dialog *
* @param comp */
*/ protected void exit() {
public void setCenter(JComponent comp) { }
this.getContentPane().add(comp, BorderLayout.CENTER);
} //man könnte noch abfragen ob auch wirklich Borderlayout benutzt
//wird
/** /**
* installs a component in the notrh of the dialog * installs a component in the center of the dialog
* @param comp * @param comp
*/ */
public void setNorth(JComponent comp) { public void setCenter(JComponent comp) {
this.getContentPane().add(comp, BorderLayout.NORTH); this.getContentPane().add(comp, BorderLayout.CENTER);
} }
/**
* installs a component in the notrh of the dialog
* @param comp
*/
public void setNorth(JComponent comp) {
this.getContentPane().add(comp, BorderLayout.NORTH);
}
} }
//Created on 21.11.2003 //Created on 21.11.2003

14
src/de/memtext/dlg/EnterDateDlg.java

@ -10,9 +10,7 @@ import de.memtext.widgets.WarningMessage;
public class EnterDateDlg { public class EnterDateDlg {
private java.util.Date date; private java.util.Date date;
private Component parentComp; private Component parentComp;
private String title, text; private String title, text;
public EnterDateDlg(Component parentComp, String text, String title) { public EnterDateDlg(Component parentComp, String text, String title) {
@ -21,16 +19,17 @@ public class EnterDateDlg {
this.text = text; this.text = text;
} }
public boolean wasOkSelected() { public boolean wasOkSelected()
return date != null; {
return date!=null;
} }
public void show() { public void show() {
date = null; date = null;
String in; String in;
boolean ok = false; boolean ok = false;
while (!ok) { while (!ok) {
in = JOptionPane.showInputDialog(parentComp, text, title, JOptionPane.QUESTION_MESSAGE); in = JOptionPane.showInputDialog(parentComp, text, title,
JOptionPane.QUESTION_MESSAGE);
if (in == null) { if (in == null) {
date = null; date = null;
ok = true; ok = true;
@ -39,7 +38,8 @@ public class EnterDateDlg {
date = DateUtils.parse(in); date = DateUtils.parse(in);
ok = true; ok = true;
} catch (ParseException e) { } catch (ParseException e) {
WarningMessage.show(parentComp, "Ungültige Datumseingabe", title); WarningMessage.show(parentComp, "Ungültige Datumseingabe",
title);
} }
} }
} }

95
src/de/memtext/dlg/ImportDlg.java

@ -11,52 +11,53 @@ import de.memtext.widgets.FileSelectionPanel;
import de.memtext.widgets.VerticalBox; import de.memtext.widgets.VerticalBox;
public class ImportDlg extends OkCancelDlg { public class ImportDlg extends OkCancelDlg {
private JLabel lblTop = new JLabel(); private JLabel lblTop = new JLabel();
private FileSelectionPanel fsp = new FileSelectionPanel("Datei");
private FileSelectionPanel fsp = new FileSelectionPanel("Datei");
public ImportDlg(Frame owner, String title, String infoTxt) {
public ImportDlg(Frame owner, String title, String infoTxt) { super(owner, title, true);
super(owner, title, true); VerticalBox vbox = new VerticalBox();
VerticalBox vbox = new VerticalBox(); lblTop.setText(infoTxt);
lblTop.setText(infoTxt); vbox.add(lblTop);
vbox.add(lblTop); vbox.add(fsp);
vbox.add(fsp); setCenter(vbox);
setCenter(vbox); this.pack();
this.pack(); WindowUtils.center(this);
WindowUtils.center(this);
}
}
public void setCurrentDir(File defaultdir)
public void setCurrentDir(File defaultdir) { {
fsp.setCurrentDir(defaultdir); fsp.setCurrentDir(defaultdir);
} }
/**
/**
* @param endings
* @param endings */
*/ public void setFileFilter(String endings) {
public void setFileFilter(String endings) { fsp.setFileFilter(new FilenamesFilter("CSV oder XML Dateien", endings));
fsp.setFileFilter(new FilenamesFilter("CSV oder XML Dateien", endings)); }
}
protected void performOk() {
@Override this.dispose();
protected void performOk() { }
this.dispose();
} protected void performCancel() {
this.dispose();
@Override }
protected void performCancel() {
this.dispose(); public File getSelectedFile() {
} return fsp.getSelectedFile();
}
public File getSelectedFile() {
return fsp.getSelectedFile(); public static void main(String[] args) {
} ImportDlg d =
new ImportDlg(
public static void main(String[] args) { null,
ImportDlg d = new ImportDlg(null, "titl", "Unfälle importieren aus CSV- oder XML-Datei (z.B. Universum Unfallanzeige 3.0)"); "titl",
d.setFileFilter(".xml|.csv"); "Unfälle importieren aus CSV- oder XML-Datei (z.B. Universum Unfallanzeige 3.0)");
d.show(); d.setFileFilter(".xml|.csv");
} d.show();
}
} }
//Created on 19.02.2004 at 11:56:06 //Created on 19.02.2004 at 11:56:06

42
src/de/memtext/dlg/InputDialog.java

@ -11,24 +11,30 @@ import javax.swing.JOptionPane;
I.e. selection item from drop down (combobox) I.e. selection item from drop down (combobox)
*/ */
public class InputDialog { public class InputDialog {
private String title, txt; private String title, txt;
private ArrayList list;
private ArrayList list;
public InputDialog(Collection col, String title, String txt) {
public InputDialog(Collection col, String title, String txt) { super();
super(); this.title = title;
this.title = title; this.txt = txt;
this.txt = txt; list = new ArrayList();
list = new ArrayList(); if (col==null||col.size()==0) throw new IllegalArgumentException("Collection mustn't be null or empty");
if (col == null || col.size() == 0) throw new IllegalArgumentException("Collection mustn't be null or empty"); for (Iterator it = col.iterator(); it.hasNext();) {
for (Iterator it = col.iterator(); it.hasNext();) { list.add(it.next());
list.add(it.next()); }
} }
}
public Object show() {
public Object show() { return JOptionPane.showInputDialog(
return JOptionPane.showInputDialog(null, txt, title, JOptionPane.QUESTION_MESSAGE, null, list.toArray(), null); null,
} txt,
title,
JOptionPane.QUESTION_MESSAGE,
null,
list.toArray(),
null);
}
} }

109
src/de/memtext/dlg/LoginDlg.java

@ -10,65 +10,58 @@ import de.memtext.widgets.MultilineEditPanel;
A Login Dialog A Login Dialog
*/ */
public class LoginDlg extends OkCancelDlg { public class LoginDlg extends OkCancelDlg {
private LabeledTextField lUser = new LabeledTextField("Kennung", 15); private LabeledTextField lUser = new LabeledTextField("Kennung", 15);
private LabeledPasswordField lPass =
new LabeledPasswordField("Passwort", 15);
public LoginDlg(JFrame frame, String title) {
super(frame, title,true);
initdlg();
}
private LabeledPasswordField lPass = new LabeledPasswordField("Passwort", 15); private void initdlg() {
MultilineEditPanel vbox = new MultilineEditPanel();
vbox.add(lUser);
vbox.add(lPass);
this.setCenter(vbox);
this.pack();
}
public LoginDlg(JFrame frame, String title) { protected void performOk() {
super(frame, title, true); this.hide();
initdlg(); }
} public void setUsername(String username)
{
lUser.setValue(username);
}
public void setPassword(String password)
{
lPass.setValue(password);
}
protected void performCancel() {
this.hide();
}
public String getUsername() {
return lUser.getValue().toString();
}
/**
* can be returned only once, cleared for security reasons
* afterwards
* @return
*/
public String getPassword() {
/* char[] pw = passw.getPassword();
String result = new String(pw);
for (int i = 0; i < pw.length; i++) {
pw[i] = 0;
}
return result;
*/
return lPass.getValue().toString();
}
public static void main(String args[]) {
LoginDlg d=new LoginDlg(null,"asdf");
d.show();
System.out.println(d.getPassword());
private void initdlg() { }
MultilineEditPanel vbox = new MultilineEditPanel();
vbox.add(lUser);
vbox.add(lPass);
this.setCenter(vbox);
this.pack();
}
@Override
protected void performOk() {
this.hide();
}
public void setUsername(String username) {
lUser.setValue(username);
}
public void setPassword(String password) {
lPass.setValue(password);
}
@Override
protected void performCancel() {
this.hide();
}
public String getUsername() {
return lUser.getValue().toString();
}
/**
* can be returned only once, cleared for security reasons
* afterwards
* @return
*/
public String getPassword() {
/* char[] pw = passw.getPassword();
String result = new String(pw);
for (int i = 0; i < pw.length; i++) {
pw[i] = 0;
}
return result;
*/
return lPass.getValue().toString();
}
public static void main(String args[]) {
LoginDlg d = new LoginDlg(null, "asdf");
d.show();
System.out.println(d.getPassword());
}
} }

201
src/de/memtext/dlg/NodeSelectionDlg.java

@ -18,115 +18,96 @@ import de.memtext.util.WindowUtils;
* one node or to clear the selection * one node or to clear the selection
*/ */
public class NodeSelectionDlg extends OkCancelClearDlg { public class NodeSelectionDlg extends OkCancelClearDlg {
private JTree tree; private JTree tree;
private Object selectedNode = null;
private Object selectedNode = null; private String title;
public NodeSelectionDlg(Frame owner, String title, JTree tree) {
private String title; super(owner, title);
this.tree = tree;
public NodeSelectionDlg(Frame owner, String title, JTree tree) { this.title=title;
super(owner, title); this.setCenter(new JScrollPane(tree));
this.tree = tree; selectedNode = null;
this.title = title; if (tree.getLastSelectedPathComponent() != null)
this.setCenter(new JScrollPane(tree)); selectedNode = (TreeNode) tree.getLastSelectedPathComponent();
selectedNode = null; this.pack();
if (tree.getLastSelectedPathComponent() != null) selectedNode = (TreeNode) tree.getLastSelectedPathComponent(); WindowUtils.center(this);
this.pack(); addWindowListener(new WindowAdapter() {
WindowUtils.center(this); public void windowClosing(WindowEvent we) {
addWindowListener(new WindowAdapter() { exit();
@Override }
public void windowClosing(WindowEvent we) { });
exit(); }
} /**
}); * called if window is closed, does nothing by default,
} * subclasses can override
*
/** */
* called if window is closed, does nothing by default, protected void exit() {
* subclasses can override }
*
*/ public NodeSelectionDlg(
@Override Frame owner,
protected void exit() { String title,
} DefaultTreeModel treeModel) {
this(owner, title, new JTree(treeModel));
public NodeSelectionDlg(Frame owner, String title, DefaultTreeModel treeModel) { }
this(owner, title, new JTree(treeModel)); public NodeSelectionDlg(Frame owner, String title, TreeNode node) {
} this(owner, title, new JTree(node));
}
public NodeSelectionDlg(Frame owner, String title, TreeNode node) { /**
this(owner, title, new JTree(node)); * can be overriden by subclasses to perform a check if
} * the selected node is OK
* @return
/** */
* can be overriden by subclasses to perform a check if protected boolean isSelectedNodeOk(TreeNode testme)
* the selected node is OK {
* @return return true;
*/ }
protected boolean isSelectedNodeOk(TreeNode testme) { protected void performOk() {
return true; if (!isSelectedNodeOk((TreeNode)tree.getLastSelectedPathComponent())) return;
} selectedNode = tree.getLastSelectedPathComponent();
this.setVisible(false);
@Override }
protected void performOk() {
if (!isSelectedNodeOk((TreeNode) tree.getLastSelectedPathComponent())) return; protected void performCancel() {
selectedNode = tree.getLastSelectedPathComponent(); this.setVisible(false);
this.setVisible(false); }
} public TreeNode getSelectedNode() {
return selectedNode == null ? null : (TreeNode) selectedNode;
@Override }
protected void performCancel() { protected void performClear() {
this.setVisible(false); selectedNode = null;
} tree.clearSelection();
this.setVisible(false);
public TreeNode getSelectedNode() { }
return selectedNode == null ? null : (TreeNode) selectedNode; public void setSize(Dimension dim) {
} super.setSize(dim);
WindowUtils.center(this);
@Override }
protected void performClear() { public void setSize(int x, int y) {
selectedNode = null; super.setSize(x, y);
tree.clearSelection(); WindowUtils.center(this);
this.setVisible(false); }
} public static void main(String a[]) {
NodeSelectionDlg t = new NodeSelectionDlg(null, "adsf", new JTree());
@Override t.pack();
public void setSize(Dimension dim) { t.show();
super.setSize(dim); System.out.println(t.getSelectedNode());
WindowUtils.center(this); t.show();
} System.out.println(t.getSelectedNode());
}
@Override public void setNode(TreeNode node) {
public void setSize(int x, int y) { tree.setModel(new DefaultTreeModel(node));
super.setSize(x, y); selectedNode=null;
WindowUtils.center(this); }
} public void setCellRenderer(TreeCellRenderer renderer) {
tree.setCellRenderer(renderer);
public static void main(String a[]) { }
NodeSelectionDlg t = new NodeSelectionDlg(null, "adsf", new JTree()); public String getTitle() {
t.pack(); return title;
t.show(); }
System.out.println(t.getSelectedNode()); public String getInfoText() {
t.show(); return title;
System.out.println(t.getSelectedNode()); }
}
public void setNode(TreeNode node) {
tree.setModel(new DefaultTreeModel(node));
selectedNode = null;
}
public void setCellRenderer(TreeCellRenderer renderer) {
tree.setCellRenderer(renderer);
}
@Override
public String getTitle() {
return title;
}
public String getInfoText() {
return title;
}
} }
//Created on 17.11.2003 //Created on 17.11.2003

74
src/de/memtext/dlg/ObjectCheckBoxDlg.java

@ -8,48 +8,46 @@ import java.util.List;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import de.memtext.util.WindowUtils;
import de.memtext.widgets.ObjectCheckBox; import de.memtext.widgets.ObjectCheckBox;
import de.memtext.widgets.VerticalBox; import de.memtext.widgets.VerticalBox;
import de.memtext.util.WindowUtils;
public class ObjectCheckBoxDlg extends OkCancelDlg { public class ObjectCheckBoxDlg extends OkCancelDlg {
private List boxList = new LinkedList(); private List boxList = new LinkedList();
private List selectedObjectsList;
private List selectedObjectsList; public ObjectCheckBoxDlg(Frame frame, String title, List itemList,boolean selected)
throws HeadlessException {
public ObjectCheckBoxDlg(Frame frame, String title, List itemList, boolean selected) throws HeadlessException { super(frame, title);
super(frame, title); VerticalBox vbox = new VerticalBox();
VerticalBox vbox = new VerticalBox(); for (Iterator it = itemList.iterator(); it.hasNext();) {
for (Iterator it = itemList.iterator(); it.hasNext();) { Object element = (Object) it.next();
Object element = (Object) it.next(); ObjectCheckBox cb = new ObjectCheckBox(element,selected);
ObjectCheckBox cb = new ObjectCheckBox(element, selected); boxList.add(cb);
boxList.add(cb); vbox.add(cb);
vbox.add(cb); }
} this.setCenter(new JScrollPane(vbox));
this.setCenter(new JScrollPane(vbox)); this.pack();
this.pack(); WindowUtils.center(this);
WindowUtils.center(this); }
}
protected void performOk() {
@Override selectedObjectsList=new LinkedList();
protected void performOk() { for (Iterator it = boxList.iterator(); it.hasNext();) {
selectedObjectsList = new LinkedList(); ObjectCheckBox element = (ObjectCheckBox) it.next();
for (Iterator it = boxList.iterator(); it.hasNext();) { if (element.isSelected())
ObjectCheckBox element = (ObjectCheckBox) it.next(); selectedObjectsList.add(element.getObject());
if (element.isSelected()) selectedObjectsList.add(element.getObject()); }
} this.hide();
this.hide(); }
}
protected void performCancel() {
@Override selectedObjectsList=new LinkedList();
protected void performCancel() { this.hide();
selectedObjectsList = new LinkedList(); }
this.hide();
} public List getSelectedObjectsList() {
return selectedObjectsList;
public List getSelectedObjectsList() { }
return selectedObjectsList;
}
} }

110
src/de/memtext/dlg/OkCancelClearDlg.java

@ -18,63 +18,55 @@ import javax.swing.JLabel;
getContentPane().setLayout(new BorderLayout()) or something like that, getContentPane().setLayout(new BorderLayout()) or something like that,
because that will cause southPanel to disappear because that will cause southPanel to disappear
*/ */
public abstract class OkCancelClearDlg extends OkCancelDlg { public abstract class OkCancelClearDlg
private boolean wasClearSelected; extends OkCancelDlg
{
protected JButton btnClear = new JButton("Leeren"); private boolean wasClearSelected;
protected JButton btnClear = new JButton("Leeren");
/** /**
* Constructor for OkCancelClearDlg. * Constructor for OkCancelClearDlg.
* @param arg0 * @param arg0
* @param arg1 * @param arg1
* @throws HeadlessException * @throws HeadlessException
*/ */
public OkCancelClearDlg(Frame arg0, String title) throws HeadlessException { public OkCancelClearDlg(Frame arg0, String title)
super(arg0, title, true); throws HeadlessException {
initOkCancelClearDlg(); super(arg0, title, true);
} initOkCancelClearDlg();
}
private void initOkCancelClearDlg() {
private void initOkCancelClearDlg() {
btnClear.setActionCommand("Clear");
btnClear.addActionListener(new ActionListener() { btnClear.setActionCommand("Clear");
btnClear.addActionListener(new ActionListener() {
@Override public void actionPerformed(ActionEvent ae) {
public void actionPerformed(ActionEvent ae) { wasOkSelected = false;
wasOkSelected = false; wasClearSelected = true;
wasClearSelected = true; performClear();
performClear(); }
} });
}); addAfterCancel(btnClear);
addAfterCancel(btnClear); }
} public boolean wasClearSelected() {
return wasClearSelected;
public boolean wasClearSelected() { }
return wasClearSelected; protected abstract void performClear();
} public static void main(String[] args) {
protected abstract void performClear(); OkCancelClearDlg dlg = new OkCancelClearDlg(new JFrame(), "test") {
protected void performOk() {
public static void main(String[] args) { }
OkCancelClearDlg dlg = new OkCancelClearDlg(new JFrame(), "test") { protected void performCancel() {
}
@Override
protected void performOk() { protected void performClear() {
} }
};
@Override
protected void performCancel() { // dlg.addAboveOK(new JLabel("bla"));
} dlg.setCenter(new JLabel("cnter"));
dlg.pack();
@Override dlg.show();
protected void performClear() { }
}
};
// dlg.addAboveOK(new JLabel("bla"));
dlg.setCenter(new JLabel("cnter"));
dlg.pack();
dlg.show();
}
} }

341
src/de/memtext/dlg/OkCancelDlg.java

@ -23,183 +23,178 @@ import de.memtext.widgets.VerticalBox;
getContentPane().setLayout(new BorderLayout()) or something like that, getContentPane().setLayout(new BorderLayout()) or something like that,
because that will cause southPanel to disappear because that will cause southPanel to disappear
*/ */
public abstract class OkCancelDlg extends DialogWithExit { public abstract class OkCancelDlg
private OkCancelPanel pOkCancel; extends DialogWithExit
{
private HorizontalBox boxAboverOkCancel = new HorizontalBox(); private OkCancelPanel pOkCancel;
private HorizontalBox boxAboverOkCancel = new HorizontalBox();
protected boolean wasOkSelected, wasCancelSelected; protected boolean wasOkSelected,wasCancelSelected;
public OkCancelDlg(Frame owner, String title, boolean isModal) {
public OkCancelDlg(Frame owner, String title, boolean isModal) { super(owner, title, isModal);
super(owner, title, isModal); initOkCancelDlg();
initOkCancelDlg(); }
}
/**
/** * Constructor for OkCancelDlg.
* Constructor for OkCancelDlg. * @param arg0
* @param arg0 * @param arg1
* @param arg1 * @param arg2
* @param arg2 * @throws HeadlessException
* @throws HeadlessException */
*/ public OkCancelDlg(Frame frame, String title) throws HeadlessException {
public OkCancelDlg(Frame frame, String title) throws HeadlessException { super(frame, title, true);
super(frame, title, true); initOkCancelDlg();
initOkCancelDlg(); }
}
/**
/** * Constructor for OkCancelDlg.
* Constructor for OkCancelDlg. * @param arg0
* @param arg0 * @throws HeadlessException
* @throws HeadlessException */
*/ public OkCancelDlg(Dialog arg0) throws HeadlessException {
public OkCancelDlg(Dialog arg0) throws HeadlessException { super(arg0, true);
super(arg0, true); initOkCancelDlg();
initOkCancelDlg(); }
}
/**
/** * Constructor for OkCancelDlg.
* Constructor for OkCancelDlg. * @param arg0
* @param arg0 * @param arg1
* @param arg1 * @throws HeadlessException
* @throws HeadlessException */
*/ public OkCancelDlg(Dialog arg0, String arg1) throws HeadlessException {
public OkCancelDlg(Dialog arg0, String arg1) throws HeadlessException { super(arg0, arg1, true);
super(arg0, arg1, true); initOkCancelDlg();
initOkCancelDlg(); }
}
private void initOkCancelDlg() {
private void initOkCancelDlg() { //this.setContentPane(new OneTimeInitContentPane());
//this.setContentPane(new OneTimeInitContentPane()); VerticalBox pSouth = new VerticalBox();
VerticalBox pSouth = new VerticalBox(); pOkCancel = new OkCancelPanel();
pOkCancel = new OkCancelPanel(); pSouth.add(boxAboverOkCancel);
pSouth.add(boxAboverOkCancel); pSouth.add(pOkCancel);
pSouth.add(pOkCancel);
this.getContentPane().add(pSouth, BorderLayout.SOUTH);
this.getContentPane().add(pSouth, BorderLayout.SOUTH); pOkCancel.addActionListener(new ActionListener(){
pOkCancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae)
{
@Override
public void actionPerformed(ActionEvent ae) {
String cmd = ae.getActionCommand(); String cmd = ae.getActionCommand();
if (cmd.equals("OK")) { if (cmd.equals("OK")) {
wasOkSelected = true; wasOkSelected = true;
wasCancelSelected = false; wasCancelSelected=false;
performOk(); performOk();
} }
if (cmd.equals("Cancel")) { if (cmd.equals("Cancel")) {
wasOkSelected = false; wasOkSelected = false;
wasCancelSelected = true; wasCancelSelected=true;
performCancel(); performCancel();
} }
} }
}); });
this.getRootPane().setDefaultButton(pOkCancel.getBtnOk()); this.getRootPane().setDefaultButton(pOkCancel.getBtnOk());
} }
public void addAboveOK(JComponent comp) {
public void addAboveOK(JComponent comp) { boxAboverOkCancel.add(comp);
boxAboverOkCancel.add(comp); }
}
public boolean wasOkSelected() {
public boolean wasOkSelected() { return wasOkSelected;
return wasOkSelected; }
} public boolean wasCancelSelected() {
public boolean wasCancelSelected() {
return wasCancelSelected; return wasCancelSelected;
} }
/**
/** * subclasses must implement this method and specify commands
* subclasses must implement this method and specify commands * to be executed when OK was clicked
* to be executed when OK was clicked */
*/ protected abstract void performOk();
protected abstract void performOk(); /**
* subclasses must implement this method and specify commands
/** * to be executed when Cancel was clicked
* subclasses must implement this method and specify commands *
* to be executed when Cancel was clicked */
* protected abstract void performCancel();
*/ /**
protected abstract void performCancel(); * Adds a Component before the OK button
* @param comp
/** */
* Adds a Component before the OK button public void addBeforeOK(JComponent comp) {
* @param comp int pos =
*/ de.memtext.util.ComponentUtils.getPositionOnComponent(
public void addBeforeOK(JComponent comp) { pOkCancel.getBtnOk(),
int pos = de.memtext.util.ComponentUtils.getPositionOnComponent(pOkCancel.getBtnOk(), pOkCancel); pOkCancel);
pOkCancel.add(comp, pos); pOkCancel.add(comp, pos);
} }
/**
/** * Adds a component right of the OK Button
* Adds a component right of the OK Button * @param comp
* @param comp */
*/ public void addAfterOK(JComponent comp) {
public void addAfterOK(JComponent comp) { int pos =
int pos = de.memtext.util.ComponentUtils.getPositionOnComponent(pOkCancel.getBtnOk(), pOkCancel); de.memtext.util.ComponentUtils.getPositionOnComponent(
pOkCancel.add(comp, pos + 1); pOkCancel.getBtnOk(),
} pOkCancel);
pOkCancel.add(comp, pos + 1);
/** }
* Adds a component right of the Cancel Button /**
* @param comp * Adds a component right of the Cancel Button
*/ * @param comp
public void addAfterCancel(JComponent comp) { */
int pos = de.memtext.util.ComponentUtils.getPositionOnComponent(pOkCancel.getBtnCancel(), pOkCancel); public void addAfterCancel(JComponent comp) {
pOkCancel.add(comp, pos + 1); int pos =
} de.memtext.util.ComponentUtils.getPositionOnComponent(
/* class OneTimeInitContentPane extends Container { pOkCancel.getBtnCancel(),
private int setLayoutCount=0; pOkCancel);
public void setLayout(LayoutManager manager) { pOkCancel.add(comp, pos + 1);
if (!(manager instanceof BorderLayout)) { }
throw new IllegalArgumentException("OKCancel Dlg must have BorderLayout"); /* class OneTimeInitContentPane extends Container {
} private int setLayoutCount=0;
super.setLayout(manager); public void setLayout(LayoutManager manager) {
setLayoutCount++; if (!(manager instanceof BorderLayout)) {
if (setLayoutCount > 0) { throw new IllegalArgumentException("OKCancel Dlg must have BorderLayout");
System.out.println( }
"changing layout may cause problems in OKCancelDlg"); super.setLayout(manager);
setLayoutCount++;
} if (setLayoutCount > 0) {
} System.out.println(
}*/ "changing layout may cause problems in OKCancelDlg");
public void setOkVisible(boolean b) { }
pOkCancel.setOkVisible(b); }
} }*/
public void setCancelVisible(boolean b) { public void setOkVisible(boolean b) {
pOkCancel.setCancelVisible(b); pOkCancel.setOkVisible(b);
} }
public void setCancelVisible(boolean b) {
public boolean requestFocusForOK() { pOkCancel.setCancelVisible(b);
return pOkCancel.getBtnOk().requestFocusInWindow(); }
} public boolean requestFocusForOK() {
return pOkCancel.getBtnOk().requestFocusInWindow();
public void setOkBold(boolean b) { }
pOkCancel.setOkBold(b); public void setOkBold(boolean b) {
} pOkCancel.setOkBold(b);
}
public void setOkDefaultButton() {
this.getRootPane().setDefaultButton(pOkCancel.getBtnOk()); public void setOkDefaultButton() {
} this.getRootPane().setDefaultButton(pOkCancel.getBtnOk());
}
public static void main(String[] args) {
public static void main(String[] args) {
OkCancelDlg dlg = new OkCancelDlg(new JFrame(), "test") {
@Override OkCancelDlg dlg = new OkCancelDlg(new JFrame(), "test") {
protected void performOk() { protected void performOk() {
} }
@Override protected void performCancel() {
protected void performCancel() { }
} };
};
// dlg.addAboveOK(new JLabel("bla"));
// dlg.addAboveOK(new JLabel("bla")); dlg.setCenter(new JLabel("cnter"));
dlg.setCenter(new JLabel("cnter")); dlg.pack();
dlg.pack(); dlg.show();
dlg.show(); }
}
} }

89
src/de/memtext/dlg/OkCancelPanel.java

@ -10,52 +10,47 @@ import javax.swing.JPanel;
A Panel with an OK and a Cancel button. A Panel with an OK and a Cancel button.
*/ */
public class OkCancelPanel extends JPanel { public class OkCancelPanel extends JPanel {
protected JButton btnOk, btnCancel; protected JButton btnOk, btnCancel;
public OkCancelPanel() {
public OkCancelPanel() { btnOk = new JButton("OK");
btnOk = new JButton("OK"); btnCancel = new JButton("Abbrechen");
btnCancel = new JButton("Abbrechen"); btnCancel.setActionCommand("Cancel");
btnCancel.setActionCommand("Cancel"); add(btnOk);
add(btnOk); add(btnCancel);
add(btnCancel);
}
} public void addActionListener(ActionListener al) {
btnOk.addActionListener(al);
public void addActionListener(ActionListener al) { btnCancel.addActionListener(al);
btnOk.addActionListener(al); }
btnCancel.addActionListener(al);
} /**
* Returns the btnCancel.
/** * @return JButton
* Returns the btnCancel. */
* @return JButton public JButton getBtnCancel() {
*/ return btnCancel;
public JButton getBtnCancel() { }
return btnCancel;
} /**
* Returns the btnOk.
/** * @return JButton
* Returns the btnOk. */
* @return JButton public JButton getBtnOk() {
*/ return btnOk;
public JButton getBtnOk() { }
return btnOk; public void setOkVisible(boolean b) {
} btnOk.setVisible(b);
}
public void setOkVisible(boolean b) { public void setCancelVisible(boolean b) {
btnOk.setVisible(b); btnCancel.setVisible(b);
} }
public void setOkBold(boolean b) {
public void setCancelVisible(boolean b) { Font f=btnOk.getFont();
btnCancel.setVisible(b); if (b)
} btnOk.setFont(f.deriveFont(Font.BOLD));
else
public void setOkBold(boolean b) { btnOk.setFont(f.deriveFont(Font.PLAIN));
Font f = btnOk.getFont(); }
if (b)
btnOk.setFont(f.deriveFont(Font.BOLD));
else
btnOk.setFont(f.deriveFont(Font.PLAIN));
}
} }

161
src/de/memtext/dlg/OkDlg.java

@ -11,7 +11,6 @@ import java.awt.event.ActionListener;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JPanel; import javax.swing.JPanel;
/** /**
* Dialog which can only be closed by clicking OK. * Dialog which can only be closed by clicking OK.
* *
@ -21,89 +20,87 @@ import javax.swing.JPanel;
* *
*/ */
public class OkDlg extends DialogWithExit { public class OkDlg extends DialogWithExit {
private JPanel psouth = new JPanel(); private JPanel psouth = new JPanel();
protected JButton ok = new JButton("OK");
protected JButton ok = new JButton("OK");
/**
/** * Constructor for OkDlg.
* Constructor for OkDlg. * @param arg0
* @param arg0 * @throws HeadlessException
* @throws HeadlessException */
*/ public OkDlg(Frame owner) throws HeadlessException {
public OkDlg(Frame owner) throws HeadlessException { super(owner,true);
super(owner, true); initSouth();
initSouth(); }
} public OkDlg(Frame owner, String title, boolean isModal) {
super(owner,title,isModal);
public OkDlg(Frame owner, String title, boolean isModal) { initSouth();
super(owner, title, isModal); }
initSouth();
}
public OkDlg(Frame owner, String title) throws HeadlessException {
super(owner, title,true);
public OkDlg(Frame owner, String title) throws HeadlessException { initSouth();
super(owner, title, true); }
initSouth();
}
public JButton getOkBtn()
{
public JButton getOkBtn() { return ok;
return ok; }
}
/**
/** * Constructor for OkDlg.
* Constructor for OkDlg. * @param arg0
* @param arg0 * @throws HeadlessException
* @throws HeadlessException */
*/ public OkDlg(Dialog arg0) throws HeadlessException {
public OkDlg(Dialog arg0) throws HeadlessException { super(arg0,true);
super(arg0, true); initSouth();
initSouth(); }
}
private void initSouth() {
private void initSouth() {
ok.addActionListener(new ActionListener(){
ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae)
{
@Override
public void actionPerformed(ActionEvent ae) {
performOk(); performOk();
} }
}); });
psouth.add(ok); psouth.add(ok);
Container cp = this.getContentPane(); Container cp = this.getContentPane();
cp.add(psouth, BorderLayout.SOUTH); cp.add(psouth, BorderLayout.SOUTH);
this.getRootPane().setDefaultButton(ok); this.getRootPane().setDefaultButton(ok);
} }
public void addBeforeOK(JComponent comp) { public void addBeforeOK(JComponent comp) {
int pos = de.memtext.util.ComponentUtils.getPositionOnComponent(ok, psouth); int pos =
psouth.add(comp, pos); de.memtext.util.ComponentUtils.getPositionOnComponent(ok, psouth);
} psouth.add(comp, pos);
}
public void addAfterOK(JComponent comp) { public void addAfterOK(JComponent comp) {
int pos = de.memtext.util.ComponentUtils.getPositionOnComponent(ok, psouth); int pos =
psouth.add(comp, pos + 1); de.memtext.util.ComponentUtils.getPositionOnComponent(ok, psouth);
} psouth.add(comp, pos+1);
}
/** /**
* subclasses can override this method and specify commands * subclasses can override this method and specify commands
* to be executed when OK was clicked * to be executed when OK was clicked
*/ */
protected void performOk() { protected void performOk()
this.hide(); {
} this.hide();
}
public static void main(String args[]) { public static void main(String args[]) {
OkDlg d = new OkDlg(new javax.swing.JFrame()); OkDlg d=new OkDlg(new javax.swing.JFrame());
d.show(); d.show();
} }
} }

310
src/de/memtext/dlg/OkDoneDlg.java

@ -17,161 +17,169 @@ import java.awt.event.ActionListener;
A abstract dialog with OK and DONE buttons. Subclasses must implement A abstract dialog with OK and DONE buttons. Subclasses must implement
performDone() and performOK(); performDone() and performOK();
*/ */
public abstract class OkDoneDlg extends DialogWithExit { public abstract class OkDoneDlg extends DialogWithExit {
/** /**
* Constructor for OkDoneDlg. * Constructor for OkDoneDlg.
* @throws HeadlessException * @throws HeadlessException
*/ */
public OkDoneDlg() throws HeadlessException { public OkDoneDlg() throws HeadlessException {
super(); super();
initSouth(); initSouth();
} }
/** /**
* Constructor for OkDoneDlg. * Constructor for OkDoneDlg.
* @param arg0 * @param arg0
* @throws HeadlessException * @throws HeadlessException
*/ */
public OkDoneDlg(Frame arg0) throws HeadlessException { public OkDoneDlg(Frame arg0) throws HeadlessException {
super(arg0); super(arg0);
initSouth(); initSouth();
} }
/** /**
* Constructor for OkDoneDlg. * Constructor for OkDoneDlg.
* @param arg0 * @param arg0
* @param arg1 * @param arg1
* @throws HeadlessException * @throws HeadlessException
*/ */
public OkDoneDlg(Frame arg0, boolean arg1) throws HeadlessException { public OkDoneDlg(Frame arg0, boolean arg1) throws HeadlessException {
super(arg0, arg1); super(arg0, arg1);
initSouth(); initSouth();
} }
/** /**
* Constructor for OkDoneDlg. * Constructor for OkDoneDlg.
* @param arg0 * @param arg0
* @param arg1 * @param arg1
* @throws HeadlessException * @throws HeadlessException
*/ */
public OkDoneDlg(Frame arg0, String arg1) throws HeadlessException { public OkDoneDlg(Frame arg0, String arg1) throws HeadlessException {
super(arg0, arg1); super(arg0, arg1);
initSouth(); initSouth();
} }
/** /**
* Constructor for OkDoneDlg. * Constructor for OkDoneDlg.
* @param arg0 * @param arg0
* @param arg1 * @param arg1
* @param arg2 * @param arg2
* @throws HeadlessException * @throws HeadlessException
*/ */
public OkDoneDlg(Frame arg0, String arg1, boolean arg2) throws HeadlessException { public OkDoneDlg(Frame arg0, String arg1, boolean arg2)
super(arg0, arg1, arg2); throws HeadlessException {
initSouth(); super(arg0, arg1, arg2);
} initSouth();
}
/**
* Constructor for OkDoneDlg. /**
* @param arg0 * Constructor for OkDoneDlg.
* @param arg1 * @param arg0
* @param arg2 * @param arg1
* @param arg3 * @param arg2
*/ * @param arg3
public OkDoneDlg(Frame arg0, String arg1, boolean arg2, GraphicsConfiguration arg3) { */
super(arg0, arg1, arg2, arg3); public OkDoneDlg(
initSouth(); Frame arg0,
} String arg1,
boolean arg2,
/** GraphicsConfiguration arg3) {
* Constructor for OkDoneDlg. super(arg0, arg1, arg2, arg3);
* @param arg0 initSouth();
* @throws HeadlessException }
*/
public OkDoneDlg(Dialog arg0) throws HeadlessException { /**
super(arg0); * Constructor for OkDoneDlg.
initSouth(); * @param arg0
} * @throws HeadlessException
*/
/** public OkDoneDlg(Dialog arg0) throws HeadlessException {
* Constructor for OkDoneDlg. super(arg0);
* @param arg0 initSouth();
* @param arg1 }
* @throws HeadlessException
*/ /**
public OkDoneDlg(Dialog arg0, boolean arg1) throws HeadlessException { * Constructor for OkDoneDlg.
super(arg0, arg1); * @param arg0
initSouth(); * @param arg1
} * @throws HeadlessException
*/
/** public OkDoneDlg(Dialog arg0, boolean arg1) throws HeadlessException {
* Constructor for OkDoneDlg. super(arg0, arg1);
* @param arg0 initSouth();
* @param arg1 }
* @throws HeadlessException
*/ /**
public OkDoneDlg(Dialog arg0, String arg1) throws HeadlessException { * Constructor for OkDoneDlg.
super(arg0, arg1); * @param arg0
initSouth(); * @param arg1
} * @throws HeadlessException
*/
/** public OkDoneDlg(Dialog arg0, String arg1) throws HeadlessException {
* Constructor for OkDoneDlg. super(arg0, arg1);
* @param arg0 initSouth();
* @param arg1 }
* @param arg2
* @throws HeadlessException /**
*/ * Constructor for OkDoneDlg.
public OkDoneDlg(Dialog arg0, String arg1, boolean arg2) throws HeadlessException { * @param arg0
super(arg0, arg1, arg2); * @param arg1
initSouth(); * @param arg2
} * @throws HeadlessException
*/
/** public OkDoneDlg(Dialog arg0, String arg1, boolean arg2)
* Constructor for OkDoneDlg. throws HeadlessException {
* @param arg0 super(arg0, arg1, arg2);
* @param arg1 initSouth();
* @param arg2 }
* @param arg3
* @throws HeadlessException /**
*/ * Constructor for OkDoneDlg.
public OkDoneDlg(Dialog arg0, String arg1, boolean arg2, GraphicsConfiguration arg3) throws HeadlessException { * @param arg0
super(arg0, arg1, arg2, arg3); * @param arg1
initSouth(); * @param arg2
} * @param arg3
* @throws HeadlessException
private void initSouth() { */
OkCancelPanel ocp = new OkCancelPanel(); public OkDoneDlg(
Container cp = this.getContentPane(); Dialog arg0,
cp.add(ocp, BorderLayout.SOUTH); String arg1,
ocp.addActionListener(new ActionListener() { boolean arg2,
GraphicsConfiguration arg3)
@Override throws HeadlessException {
public void actionPerformed(ActionEvent ae) { super(arg0, arg1, arg2, arg3);
initSouth();
}
private void initSouth() {
OkCancelPanel ocp = new OkCancelPanel();
Container cp = this.getContentPane();
cp.add(ocp, BorderLayout.SOUTH);
ocp.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae)
{
String cmd = ae.getActionCommand(); String cmd = ae.getActionCommand();
if (cmd.equals("OK")) { if (cmd.equals("OK")) {
performOk(); performOk();
} }
if (cmd.equals("Done")) { if (cmd.equals("Done")) {
performDone(); performDone();
} }
} }
}); });;
; }
}
/** /**
* subclasses must implement this method and specify commands * subclasses must implement this method and specify commands
* to be executed when OK was clicked * to be executed when OK was clicked
*/ */
protected abstract void performOk(); protected abstract void performOk();
/**
* subclasses must implement this method and specify commands
* to be executed when DONE was clicked
*/
/** protected abstract void performDone();
* subclasses must implement this method and specify commands
* to be executed when DONE was clicked
*/
protected abstract void performDone();
} }

26
src/de/memtext/dlg/OkDonePanel.java

@ -14,19 +14,19 @@ import javax.swing.JPanel;
* Window>Preferences>Java>Code Generation. * Window>Preferences>Java>Code Generation.
*/ */
public class OkDonePanel extends JPanel { public class OkDonePanel extends JPanel {
JButton btnOk, btnDone; JButton btnOk,btnDone;
public OkDonePanel()
public OkDonePanel() { {
btnOk = new JButton("OK"); btnOk=new JButton("OK");
btnDone = new JButton("Fertig"); btnDone=new JButton("Fertig");
add(btnOk); add(btnOk);
add(btnDone); add(btnDone);
} }
public void addActionListener(ActionListener al)
public void addActionListener(ActionListener al) { {
btnOk.addActionListener(al); btnOk.addActionListener(al);
btnDone.addActionListener(al); btnDone.addActionListener(al);
} }
} }

338
src/de/memtext/dlg/PasswdChangeDlg.java

@ -18,182 +18,168 @@ import de.memtext.widgets.HorizontalBox;
import de.memtext.widgets.WarningMessage; import de.memtext.widgets.WarningMessage;
public abstract class PasswdChangeDlg extends OkCancelDlg { public abstract class PasswdChangeDlg extends OkCancelDlg {
private JLabel lblInfoDummy = new JLabel(); private JLabel lblInfoDummy=new JLabel();
private NewPasswordChecker newPasswordChecker;
private NewPasswordChecker newPasswordChecker; private boolean isCheckOldPasswdWanted = true,isNewPasswordRequired=true;
private JTextField usernameField = new JTextField(20);
private boolean isCheckOldPasswdWanted = true, isNewPasswordRequired = true; private KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
private JLabel lblInfo=new JLabel();
private JTextField usernameField = new JTextField(20); private JLabel lbl0 = new JLabel("Username:", JLabel.RIGHT);
private JLabel lbl1 = new JLabel("altes Passwort:", JLabel.RIGHT);
private KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); private JPasswordField oldpasswField = new JPasswordField(30);
private JLabel lbl2 = new JLabel("neues Passwort:", JLabel.RIGHT);
private JLabel lblInfo = new JLabel(); private JPasswordField newpasswField = new JPasswordField(30);
private JLabel lbl3 = new JLabel("wiederholen:", JLabel.RIGHT);
private JLabel lbl0 = new JLabel("Username:", JLabel.RIGHT); private JPasswordField newpasswField2 = new JPasswordField(30);
private JLabel lbl1 = new JLabel("altes Passwort:", JLabel.RIGHT); public PasswdChangeDlg(Frame frame, String title) {
super(frame, title, true);
private JPasswordField oldpasswField = new JPasswordField(30); JPanel p=new JPanel();
p.add(lblInfo);
private JLabel lbl2 = new JLabel("neues Passwort:", JLabel.RIGHT); HorizontalBox hbox = new HorizontalBox();
JPanel lblPanel = new JPanel(new GridLayout(0, 1));
private JPasswordField newpasswField = new JPasswordField(30); lblPanel.setMaximumSize(new Dimension(150, 100));
private JLabel lbl3 = new JLabel("wiederholen:", JLabel.RIGHT);
lblPanel.add(lbl0);
private JPasswordField newpasswField2 = new JPasswordField(30); lblPanel.add(lbl1);
lblPanel.add(lbl2);
public PasswdChangeDlg(Frame frame, String title) { lblPanel.add(lbl3);
super(frame, title, true);
JPanel p = new JPanel(); lblInfo.setVisible(false);
p.add(lblInfo); hbox.add(lblPanel);
HorizontalBox hbox = new HorizontalBox(); JPanel fieldPanel = new JPanel(new GridLayout(0, 1));
JPanel lblPanel = new JPanel(new GridLayout(0, 1));
lblPanel.setMaximumSize(new Dimension(150, 100)); fieldPanel.add(usernameField);
usernameField.getKeymap().removeKeyStrokeBinding(enter);
lblPanel.add(lbl0); fieldPanel.add(oldpasswField);
lblPanel.add(lbl1); oldpasswField.getKeymap().removeKeyStrokeBinding(enter);
lblPanel.add(lbl2); fieldPanel.add(newpasswField);
lblPanel.add(lbl3); newpasswField.getKeymap().removeKeyStrokeBinding(enter);
fieldPanel.add(newpasswField2);
lblInfo.setVisible(false); newpasswField2.getKeymap().removeKeyStrokeBinding(enter);
hbox.add(lblPanel); hbox.add(fieldPanel);
JPanel fieldPanel = new JPanel(new GridLayout(0, 1)); this.setCenter(hbox);
this.setNorth(p);
fieldPanel.add(usernameField); this.pack();
usernameField.getKeymap().removeKeyStrokeBinding(enter); WindowUtils.center(this);
}
fieldPanel.add(oldpasswField); public void setNewPasswordChecker(NewPasswordChecker newPasswordChecker)
oldpasswField.getKeymap().removeKeyStrokeBinding(enter); {
fieldPanel.add(newpasswField); this.newPasswordChecker=newPasswordChecker;
newpasswField.getKeymap().removeKeyStrokeBinding(enter); }
fieldPanel.add(newpasswField2); public void setUsername(String username) {
newpasswField2.getKeymap().removeKeyStrokeBinding(enter); usernameField.setText(username);
hbox.add(fieldPanel); }
this.setCenter(hbox); public void clear() {
this.setNorth(p); usernameField.setText("");
this.pack(); oldpasswField.setText("");
WindowUtils.center(this); newpasswField.setText("");
} newpasswField2.setText("");
}
public void setNewPasswordChecker(NewPasswordChecker newPasswordChecker) { protected abstract boolean isOldPasswordOK(String username, String passwd);
this.newPasswordChecker = newPasswordChecker;
} /**
* wenn OK geklickt wird wird automatisch geprüft ob die Länge des neuen
public void setUsername(String username) { * Passwort passt und beide gleich sind
usernameField.setText(username); */
} protected final void performOk() {
String new1 = new String(newpasswField.getPassword());
public void clear() { if (new1==null||new1.length()<4 )
usernameField.setText(""); {
oldpasswField.setText(""); WarningMessage.show(this,
newpasswField.setText(""); "Das neue Passwort ist zu kurz.",
newpasswField2.setText(""); "Achtung");
} return;
}
protected abstract boolean isOldPasswordOK(String username, String passwd);
String new2 = new String(newpasswField2.getPassword());
/** String oldPassword = new String(oldpasswField.getPassword());
* wenn OK geklickt wird wird automatisch geprüft ob die Länge des neuen if (!new1.equals(new2)) {
* Passwort passt und beide gleich sind WarningMessage.show(this,
*/ "Die beiden neuen Passwörter stimmen nicht überein",
@Override "Achtung");
protected final void performOk() { return;
String new1 = new String(newpasswField.getPassword()); }
if (new1 == null || new1.length() < 4) { String faults=null;
WarningMessage.show(this, "Das neue Passwort ist zu kurz.", "Achtung"); if (newPasswordChecker!=null) faults=newPasswordChecker.checkForFaults(getUsername(),new String(newpasswField.getPassword()));
return;
} if (faults!=null) {
WarningMessage.show(this,
String new2 = new String(newpasswField2.getPassword()); faults,
String oldPassword = new String(oldpasswField.getPassword()); "Achtung");
if (!new1.equals(new2)) { return;
WarningMessage.show(this, "Die beiden neuen Passwörter stimmen nicht überein", "Achtung"); }
return;
} if (isNewPasswordRequired&&new1.equals(oldPassword))
String faults = null; {
if (newPasswordChecker != null) faults = newPasswordChecker.checkForFaults(getUsername(), new String(newpasswField.getPassword())); WarningMessage.show(this,"Sie müssen ein neues Passwort eingeben","Achtung");
return;
if (faults != null) { }
WarningMessage.show(this, faults, "Achtung");
return; if (isCheckOldPasswdWanted
} && !isOldPasswordOK(usernameField.getText(),
oldPassword)) {
if (isNewPasswordRequired && new1.equals(oldPassword)) { WarningMessage.show(this,"Das alte Passwort stimmt nicht", "Achtung");
WarningMessage.show(this, "Sie müssen ein neues Passwort eingeben", "Achtung"); return;
return; }
} this.hide();
}
if (isCheckOldPasswdWanted && !isOldPasswordOK(usernameField.getText(), oldPassword)) {
WarningMessage.show(this, "Das alte Passwort stimmt nicht", "Achtung"); protected void performCancel() {
return; this.hide();
} }
this.hide();
}
public void setUsernameFieldEnabled(boolean b) {
@Override usernameField.setEnabled(b);
protected void performCancel() { }
this.hide(); public void setOldPassword(String passw) {
} oldpasswField.setText(passw);
}
public String getUsername() {
public void setUsernameFieldEnabled(boolean b) { return usernameField.getText();
usernameField.setEnabled(b); }
} public String getOldPasswd() {
return new String(oldpasswField.getPassword());
public void setOldPassword(String passw) { }
oldpasswField.setText(passw); public String getNewPasswd() {
} return new String(newpasswField.getPassword());
}
public String getUsername() { public boolean isCheckOldPasswdWanted() {
return usernameField.getText(); return isCheckOldPasswdWanted;
} }
public String getOldPasswd() { public void setCheckOldPasswdWanted(boolean b) {
return new String(oldpasswField.getPassword()); isCheckOldPasswdWanted = b;
} lbl1.setVisible(b);
oldpasswField.setVisible(b);
public String getNewPasswd() { }
return new String(newpasswField.getPassword()); public void setInfoLabel(String txt) {
} lblInfo.setVisible(true);
lblInfo.setText(txt);
public boolean isCheckOldPasswdWanted() { lblInfo.setFont(new Font("SansSerif",Font.BOLD,12));
return isCheckOldPasswdWanted; }
}
public boolean isNewPasswordRequired() {
public void setCheckOldPasswdWanted(boolean b) { return isNewPasswordRequired;
isCheckOldPasswdWanted = b; }
lbl1.setVisible(b);
oldpasswField.setVisible(b); public void setNewPasswordRequired(boolean b) {
} isNewPasswordRequired = b;
}
public void setInfoLabel(String txt) { public static void main(String a[])
lblInfo.setVisible(true); {
lblInfo.setText(txt); PasswdChangeDlg dlg=new PasswdChangeDlg(null,"dummy"){
lblInfo.setFont(new Font("SansSerif", Font.BOLD, 12));
} protected boolean isOldPasswordOK(String username, String passwd) {
return false;
public boolean isNewPasswordRequired() { }}
return isNewPasswordRequired; ;
} dlg.setInfoLabel("bitte ändern");
dlg.show();
public void setNewPasswordRequired(boolean b) { }
isNewPasswordRequired = b;
}
public static void main(String a[]) {
PasswdChangeDlg dlg = new PasswdChangeDlg(null, "dummy") {
@Override
protected boolean isOldPasswordOK(String username, String passwd) {
return false;
}
};
dlg.setInfoLabel("bitte ändern");
dlg.show();
}
} }
//Created on 09.01.2004 at 17:16:16 //Created on 09.01.2004 at 17:16:16

122
src/de/memtext/hbt/AbstractAriel.java

@ -0,0 +1,122 @@
package de.memtext.hbt;
import java.io.IOException;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.search.FlagTerm;
import de.memtext.util.LogUtils;
import de.superx.servlet.SxMail;
import de.superx.servlet.SxPool;
public abstract class AbstractAriel extends Thread {
// this is defined as private static method to use as little memory as possible,
// it would be neglectable in moder computers to create it every time the method
// runs, GarbargeCollection would easily do the job
// yet I define it that way out of respect for the programmers of beginning in
// the 50ies/60ies or whenever
// private static FlagTerm flagUnseen = new FlagTerm(new Flags(Flags.Flag.SEEN), true); // ja ich weiß, flagUnseen
Flags seen = new Flags(Flags.Flag.RECENT);
private static FlagTerm flagUnseen = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
static Flags flagsContainingOnlySeen=new Flags(Flags.Flag.SEEN);
protected Logger logger=null;
// wird bisher nicht
// benötigt, aber ist doch
// klar, dass ich das gleich
// nutzen will, dass nervt,
// dass die Meldung jetzt
// kommt
private boolean isActive = true;
private int interval = 10;
protected SxMail sxmail;
public AbstractAriel() {
super();
}
public AbstractAriel(Runnable target) {
super(target);
}
public AbstractAriel(String name) {
super(name);
}
public AbstractAriel(ThreadGroup group, Runnable target) {
super(group, target);
}
public AbstractAriel(ThreadGroup group, String name) {
super(group, name);
}
public AbstractAriel(Runnable target, String name) {
super(target, name);
}
public AbstractAriel(ThreadGroup group, Runnable target, String name) {
super(group, target, name);
}
public AbstractAriel(ThreadGroup group, Runnable target, String name, long stackSize) {
super(group, target, name, stackSize);
}
public void initLogging()throws IOException
{
String filename=SxPool.getLogDir() + "/superx_"
+ getArielName() + ".log";
LogUtils.initRawFile("superx_" + getArielName(), filename, 20000, 1, true, true);
System.out.println("Superx Mail logging in "+filename);
logger=Logger.getLogger("superx_" + getArielName());
Level lev = Level.SEVERE;
logger.setLevel(lev);
}
public String getArielName()
{
return "mail";
}
public void run() {
while (isActive) {
try {
Thread.sleep(interval * 1000);
} catch (InterruptedException e) {
// e.printStackTrace();
}
try {
logger.log(Level.INFO,"SuperX is checking mails for new heartbeats...");
Folder inbox=sxmail.getInbox();
//if (inbox.hasNewMessages())
processNewMessages(inbox.getMessages()); // processed messages will be deleted -> don#t need inbox.search(flagUnseen)); // former first attempt was : processNewMessages(inbox.getMessages()); // should be in differnt colour (<- British English)
sxmail.closeInbox(); //deletes marked mails
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
abstract void processNewMessages(Message[] messages) throws MessagingException, IOException, SQLException;
public void setActive(boolean isActive) {
this.isActive=isActive;
}
}

96
src/de/memtext/hbt/Checker.java

@ -0,0 +1,96 @@
package de.memtext.hbt;
import java.io.IOException;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Checker {
public static void check(Session emailSession, String user, String password)
throws MessagingException, IOException {
// create the POP3 store object and connect with the pop server
// pop3s wichtig -> vermutlich secure
Store store = emailSession.getStore("pop3s");
store.connect(emailSession.getProperty("mail.pop3.host"), user, password);
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
// messages werden geholt, können nur ausgelesen werden, wenn Folder noch open
// ist!
Message[] messages = emailFolder.getMessages();
System.out.println("messages.length---" + messages.length);
for (int i = 0, n = messages.length; i < n; i++) {
Message message = messages[i];
System.out.println("---------------------------------");
System.out.println("Email Number " + (i + 1));
System.out.println("Subject: " + message.getSubject());
System.out.println("From: " + message.getFrom()[0]);
System.out.println("Text: " + message.getContent().toString());
}
// close the store and folder objects
emailFolder.close(false);
store.close();
}
private static void send(Session emailSession, String user, String recipient, String subject, String text,
String password) throws AddressException, MessagingException {
MimeMessage replyMessage = new MimeMessage(emailSession);
// replyMessage = (MimeMessage) message.reply(false);
replyMessage.setFrom(new InternetAddress(user));
replyMessage.setRecipients(Message.RecipientType.TO, recipient);
replyMessage.setSubject(subject);
replyMessage.setText(text);
Transport t = emailSession.getTransport("smtp");
t.connect(user, password);
t.sendMessage(replyMessage, replyMessage.getAllRecipients());
System.out.println("Message sent...");
}
private static Session initSession(String pophost, String smtphost) {
Properties properties = new Properties();
properties.put("mail.pop3.host", pophost);
properties.put("mail.pop3.port", "995");
properties.put("mail.pop3.starttls.enable", "true");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", smtphost);
properties.put("mail.smtp.port", "25");
return Session.getDefaultInstance(properties);
}
public static void main(String[] args) {
Session session = initSession("pop3.strato.de", "smtp.strato.de");
String username = "heartbeat@mbisping.de";
String password = "$Anfang1200";
try {
check(session, username, password);
send(session, username, "danielq@memtext.de", "From Düsseldorf with fun...", "This is the memtext's first digitial 'heartbeat' :-)\n send via java mail - \nThanks and see you around :-)",
password);
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

293
src/de/memtext/hbt/NewHeartBeatAriel.java

@ -0,0 +1,293 @@
package de.memtext.hbt;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.mail.BodyPart;
import javax.mail.Flags;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.internet.AddressException;
import javax.mail.internet.MimeMessage;
import clover.com.atlassian.extras.common.org.springframework.util.StringUtils;
import de.memtext.db.DbUtils;
import de.memtext.util.FileUtils;
import de.memtext.util.MailUtils;
import de.superx.servlet.SuperXManager;
import de.superx.servlet.SxMail;
import de.superx.servlet.SxPools;
public class NewHeartBeatAriel extends AbstractAriel {
private static final Pattern pHbtId = Pattern.compile("@hbt:\\d*@");
public NewHeartBeatAriel(SxMail sxmail) throws IOException {
this.sxmail = sxmail;
initLogging();
}
void processNewMessages(Message newMessages[]) throws MessagingException, IOException, SQLException {
logger.log(Level.INFO," found " + newMessages.length + " new messages");
for (int i = 0, n = newMessages.length; i < n; i++) {
Message aNewMessage = newMessages[i];
String content = MailUtils.getContent(aNewMessage);
if (content.indexOf("@hbt:") == -1)
createNewHeartBeat(aNewMessage, content);
else
appendToHeartBeat(aNewMessage, content);
// had thought setting via inbox nessary, but that's only the preferred way to
// set flags for group of messages since some mail implementations by have
// optimized support for groups of messages
// inbox.setFlags(new Message[] {message}, , true);
// message.setFlags(flagsContainingOnlySeen, true);
// unseen wäre schöner, mailapi.jar aktualisieren bei HIS Antrag
// nötig,vielleicht klappt mit delete
aNewMessage.setFlag(Flags.Flag.DELETED, true); // AbstractAriel.run ruft sxmail.closeInbox() auf mit
// Anweisung zu löschen
// sorry to bother you, Garbage collector , need message only to times, hey or
// doesn't that matter anyway since only a simple reference (like in good old
// C), but clearer/easier to read if line Message message=.. was superfolous
}
}
private void appendToHeartBeat(Message message, String content)
throws SQLException, IOException, MessagingException {
StringBuffer result = new StringBuffer();
int hbtTid = -1;
Connection con = SxPools.getConnection(sxmail.getMandantenID());
Statement stm = con.createStatement();
boolean isHbtFoundInDb = false;
String feedbackSubject = "";
Matcher m = pHbtId.matcher(content);
boolean foundHbtTag=m.find();
if (foundHbtTag) {
String hbtIdString = content.substring(m.start() + 5, m.end() - 1);
content=content.replaceAll("@hbt:\\d*@", "");
try {
hbtTid = Integer.parseInt(hbtIdString);
if (DbUtils.getInt(con, "select count(*) from hbt_heartbeat where tid=?", hbtTid) > 0)
isHbtFoundInDb = true;
} catch (NumberFormatException e) {
result.append(" hbt:" + hbtIdString
+ " konnte nicht in integer transformiert werden, Nachricht wird zwischengespeichert");
isHbtFoundInDb = false;
}
if (isHbtFoundInDb) {
// TODO ggfs. mehrer Topics
int maxTopic = DbUtils.getInt(con, "select max(tid) from hbt_topic where hbt_id=?", hbtTid);
// int maxNote = DbUtils.getInt(stm, "select max(tid) from hbt_note where
// hbt_id=" + hbtTid + " hbt_topic_id=" + maxTopic);
int newNoteId = createNote(con, stm, hbtTid, maxTopic, message, content);
feedbackSubject = "Your new note was added to Heartbeat " + hbtTid;
result.append("Feel free to view this HeartBeat by visiting " + sxmail.getWTFAI()
+ "/edit/hbt/hbt_viewer.jsp?tid=" + hbtTid + " \n\n" + "Always at your service: \n"
+ " your HeartBeatAriel @ SuperX");
}
}
if (!foundHbtTag || !isHbtFoundInDb) {
feedbackSubject = "Sorry, target hbt found found ...";
PreparedStatement pst=con.prepareStatement("insert into hbt_tmp_note (note) values (?)");
pst.setString(1,content);
pst.execute();
pst.close();
int newNoteId=DbUtils.getInt(stm, "select max(tid) from hbt_tmp_note");
result.append("you can select the right hbt_id by visiting " + sxmail.getWTFAI()+"/servlet/SuperXmlMaske?tid=60040?note_id="+newNoteId);
}
stm.close();
con.close();
sendFeedbackEmail(feedbackSubject, result.toString(), message);
}
private void createNewHeartBeat(Message inMessage, String content)
throws SQLException, MessagingException, IOException {
int newHbtTid = performHbtInsert(inMessage, content);
String text = "Feel free to complete this heartbeat's details by visiting " + sxmail.getWTFAI()
+ "/edit/hbt/hbt_edit.jsp?tid=" + newHbtTid + " \n\n" + "Always at your service: \n"
+ " your HeartBeatAriel @ SuperX";
sendFeedbackEmail("Your new digital heartbeat has been created ...", text, inMessage);
}
/**
* Performs the creation of a new HeartBeat in the database
*
* @param message
* @return newHbtTid
* @throws SQLException
* @throws MessagingException
* @throws IOException
*/
private int performHbtInsert(Message m, String content) throws SQLException, IOException, MessagingException {
Connection con = SxPools.getConnection(sxmail.getMandantenID());
Statement stm = con.createStatement();
int newHbtTid = createHbt(con, stm, content, m.getSubject());
int newTopicId = createTopic(stm, newHbtTid);
createNote(con, stm, newHbtTid, newTopicId, m, content);
con.close();
return newHbtTid;
}
private int createHbt(Connection dbConnection, Statement stm, String content, String subject)
throws IOException, MessagingException, SQLException {
String primary_customer_id = identifyPrimaryCustomerId(dbConnection, stm, content);
String name = StringUtils.replace(subject, "'", "''");// for SQL insert
// Sql insert - fuck prepared statements, nobody hacks this, I don't give a
// shit, not worth my extra time or effort, I want to get things done now while
// having fun :-)
stm.execute("select sp_update_sequence('hbt_heartbeat')");
String insertSql = "INSERT INTO hbt_heartbeat \n" + "( primary_customer_id,name," + " created_at, \n"
+ " status \n" + ") \n" + "VALUES \n" + "( " + primary_customer_id + ",'" + name + "', "
+ " today(), \n" + " 1 \n" + ") " + "";
stm.execute(insertSql);
int newHbtTid = DbUtils.getInt(stm, "select max(tid) from hbt_heartbeat");
return newHbtTid;
}
/**
*
* Wenn im Text der weitergeleiteten Email der Absender mit @@ markiert ist,
* z.B. @@hiber@his.de@@, diesen auslesen zugehörige Organisation auslesen
*
* @param m
* @return String null oder key_apnr z.B. '1001'
* @throws IOException
* @throws MessagingException
* @throws SQLException
*/
private String identifyPrimaryCustomerId(Connection con, Statement stm, String content)
throws IOException, MessagingException, SQLException {
String result = "null";
int pos1 = content.indexOf("@@");
int pos2 = content.substring(pos1 + 2).indexOf("@@");
if (pos1 > -1 && pos2 > -1) {
String absender = content.substring(pos1 + 2);
absender = absender.substring(0, absender.lastIndexOf("@@"));
logger.log(Level.INFO," checking customer " + absender);
int userinfo_id = DbUtils.getInt(con, "select tid from userinfo where email=?", absender);
result = DbUtils.getString(stm,
"select min(ch110_institut) from user_institution where userid=" + userinfo_id);
if (result == null)
result = "null";
else
result = "'" + result + "'";
}
return result;
}
private int createTopic(Statement stm, int newHbtTid) throws SQLException {
stm.execute("select sp_update_sequence('hbt_topic')");
String insertSql = "INSERT INTO hbt_topic \n" + "( hbt_id,name, created_at)" + "VALUES (" + newHbtTid
+ ",'Start',now() )";
stm.execute(insertSql);
int newTopicId = DbUtils.getInt(stm, "select max(tid) from hbt_topic");
return newTopicId;
}
private int createNote(Connection con, Statement stm, int hbtId, int topicId, Message m, String content)
throws IOException, MessagingException, SQLException {
stm.execute("select sp_update_sequence('hbt_note')");
PreparedStatement pst = con
.prepareStatement(" INSERT INTO hbt_note (hbt_id,hbt_topic_id,note, created_at) VALUES (?,?,?,now());");
pst.setInt(1, hbtId);
pst.setInt(2, topicId);
pst.setString(3, content);
pst.execute();
pst.close();
int newNoteId = DbUtils.getInt(stm, "select max(tid) from hbt_note");
saveAttachments(stm, hbtId, topicId, newNoteId, m);
return newNoteId;
}
private void saveAttachments(Statement stm, int newHbtTid, int newTopicId, int newNoteId, Message m)
throws IOException, MessagingException, SQLException {
// List<String> attachments = new ArrayList<String>();
Object content = m.getContent();
// if (content instanceof String) return null;
if (content instanceof Multipart) {
Multipart multipart = (Multipart) content;
for (int i = 0; i < multipart.getCount(); i++) {
BodyPart part = multipart.getBodyPart(i);
logger.log(Level.INFO,part.getFileName() + " " + part.getContentType() + " " + part.getDisposition());
if (part.getDisposition() != null && part.getDisposition().equalsIgnoreCase(Part.ATTACHMENT)) {
// result.addAll(getAttachments(multipart.getBodyPart(i)));
String filename = SuperXManager.getWEB_INFPfad()+"/downloads/hbt_"+newHbtTid+"_" +newNoteId+"_"+FileUtils.removeProblemChars(part.getFileName());
sxDownloadsInsert(stm, newHbtTid, newTopicId, newNoteId, filename, part.getContentType());
// javaxmail >1.4 bodyPart.saveFile(filename);
// old version
InputStream is = part.getInputStream();
File f = new File(filename);
FileOutputStream fos = new FileOutputStream(f);
byte[] buf = new byte[4096];
int bytesRead;
while ((bytesRead = is.read(buf)) != -1) {
fos.write(buf, 0, bytesRead);
}
fos.close();
logger.log(Level.INFO," saving attachment " + (i++) + " as " + filename);
}
}
}
}
private void sxDownloadsInsert(Statement stm, int newHbtTid, int newTopicId, int newNoteId, String filename,
String contenttype) throws SQLException {
stm.execute("select sp_update_sequence('sx_downloads')");
String filenameShort = filename.substring(filename.indexOf(File.separator + "hbt") + 1);
String insertSQLSxDownloads = "INSERT INTO sx_downloads \n" + "( \n" + " name, \n" + " importdatum, \n"
+ " kommentar, \n" + " kommentar_url, \n" + " contenttype, \n" + " datei, \n" + " gueltig_seit, \n"
+ " gueltig_bis \n" + ") \n" + "VALUES \n" + "( \n" + " '" + filenameShort + "', \n" + " today(), \n"
+ " 'kommentar_value', \n" + " 'kommentar_url_value', \n" + " '" + contenttype + "', \n" + " '"
+ filenameShort + "', \n" + " today(), \n" + " date_val('1.1.3000') \n" + ") \n" + "";
stm.execute(insertSQLSxDownloads);
int newDownloadTid = DbUtils.getInt(stm, "select max(tid) from sx_downloads");
stm.executeUpdate("insert into hbt_attachment (hbt_id,topic_id,note_id,download_id) values (" + newHbtTid + ","
+ newTopicId + "," + newNoteId + "," + newDownloadTid + ")");
}
/**
* sendFeedBackEmail -- hier hätte ich gern automatisch newline in Zeile 60
* direkt unter createNewHeartBeat automatisch erzeugt, dann nach weiter unten
* im Quelltext verlagert, damit von der Reihenfolge in
* createNewHeartBeat(Message message) her passt
*
* @param newHbtTid : tid von neuem HeartBeat in der Datenbank
* @param inMessage
* @throws MessagingException
* @throws AddressException
*/
private void sendFeedbackEmail(String subject, String text, Message inMessage)
throws AddressException, MessagingException {
MimeMessage reply = sxmail.createMessage();
reply.setRecipients(Message.RecipientType.TO, inMessage.getFrom());
reply.setSubject(subject);
reply.setText(text);
sxmail.setMessage(reply);
logger.log(Level.INFO,"Reply message happily sent...");
}
}

7
src/de/memtext/icons/ArrowDownIcon.java

@ -3,9 +3,8 @@ package de.memtext.icons;
import java.awt.Graphics; import java.awt.Graphics;
public class ArrowDownIcon extends BasicIcon { public class ArrowDownIcon extends BasicIcon {
@Override public void myPaint(Graphics g) {
public void myPaint(Graphics g) { drawArrowDown(g, 6);
drawArrowDown(g, 6); }
}
} }

7
src/de/memtext/icons/ArrowRight.java

@ -4,10 +4,9 @@ import java.awt.Graphics;
public class ArrowRight extends BasicIcon { public class ArrowRight extends BasicIcon {
@Override void myPaint(Graphics g) {
void myPaint(Graphics g) { drawArrowRight(g);
drawArrowRight(g); }
}
} }

7
src/de/memtext/icons/ArrowUpIcon.java

@ -6,10 +6,9 @@ import javax.swing.Icon;
public class ArrowUpIcon extends BasicIcon implements Icon { public class ArrowUpIcon extends BasicIcon implements Icon {
@Override public void myPaint(Graphics g) {
public void myPaint(Graphics g) { drawArrowUp(g, 4);
drawArrowUp(g, 4);
} }
} }

184
src/de/memtext/icons/BasicIcon.java

@ -8,102 +8,92 @@ import javax.swing.Icon;
import javax.swing.JButton; import javax.swing.JButton;
public abstract class BasicIcon implements Icon { public abstract class BasicIcon implements Icon {
private int iconWidth = 16, iconHeight = 16; private int iconWidth = 16, iconHeight = 16;
private Color color = Color.black;
private Color color = Color.black; /**
* @see javax.swing.Icon#getIconWidth()
/** */
* @see javax.swing.Icon#getIconWidth() public int getIconWidth() {
*/ return iconWidth;
@Override }
public int getIconWidth() {
return iconWidth; /**
} * @see javax.swing.Icon#getIconHeight()
*/
/** public int getIconHeight() {
* @see javax.swing.Icon#getIconHeight() return iconHeight;
*/ }
@Override public void paintIcon(Component c, Graphics g, int x, int y) {
public int getIconHeight() { g.translate(x, y);
return iconHeight; if (c.isEnabled())
} g.setColor(color);
else
@Override g.setColor(Color.GRAY);
public void paintIcon(Component c, Graphics g, int x, int y) { myPaint(g);
g.translate(x, y); g.translate(-x, -y);
if (c.isEnabled()) }
g.setColor(color); abstract void myPaint(Graphics g);
else void drawDoubleLine(Graphics g, int y) {
g.setColor(Color.GRAY); if (y > getIconHeight() - 2)
myPaint(g); throw new IllegalArgumentException("can't draw that low");
g.translate(-x, -y); g.drawLine(0, y, getIconWidth(), y);
} g.drawLine(0, y + 1, getIconWidth(), y + 1);
}
abstract void myPaint(Graphics g);
void drawArrowRight(Graphics g) {
void drawDoubleLine(Graphics g, int y) { int midx = (int) Math.floor(getIconWidth() / 2);
if (y > getIconHeight() - 2) throw new IllegalArgumentException("can't draw that low"); int midy = (int) Math.floor(getIconHeight() / 2);
g.drawLine(0, y, getIconWidth(), y); // mittellinie
g.drawLine(0, y + 1, getIconWidth(), y + 1); g.drawLine(0, midy - 1, getIconWidth(), midy - 1);
} g.drawLine(0, midy, getIconWidth(), midy);
g.drawLine(0, midy + 1, getIconWidth(), midy + 1);
void drawArrowRight(Graphics g) {
int midx = (int) Math.floor(getIconWidth() / 2); g.drawLine(midx + 1, 1, getIconWidth(), midy - 1);
int midy = (int) Math.floor(getIconHeight() / 2); g.drawLine(midx + 1, 2, getIconWidth(), midy);
// mittellinie
g.drawLine(0, midy - 1, getIconWidth(), midy - 1); g.drawLine(midx + 1, getIconHeight() - 1, getIconWidth(), midy + 1);
g.drawLine(0, midy, getIconWidth(), midy); g.drawLine(midx + 1, getIconHeight() - 2, getIconWidth(), midy);
g.drawLine(0, midy + 1, getIconWidth(), midy + 1);
}
g.drawLine(midx + 1, 1, getIconWidth(), midy - 1);
g.drawLine(midx + 1, 2, getIconWidth(), midy); void drawArrowUp(Graphics g, int y) {
int midx = (int) Math.floor(getIconWidth() / 2);
g.drawLine(midx + 1, getIconHeight() - 1, getIconWidth(), midy + 1); int midy = (int) Math.floor(getIconHeight() / 2);
g.drawLine(midx + 1, getIconHeight() - 2, getIconWidth(), midy); g.drawLine(0, y + midy, midx, y);
g.drawLine(midx, y, getIconWidth(), y + midy);
} g.drawLine(0, y + midy + 1, midx, y + 1);
g.drawLine(midx, y + 1, getIconWidth(), y + midy + 1);
void drawArrowUp(Graphics g, int y) {
int midx = (int) Math.floor(getIconWidth() / 2); }
int midy = (int) Math.floor(getIconHeight() / 2); void drawArrowDown(Graphics g, int y) {
g.drawLine(0, y + midy, midx, y); int midx = (int) Math.floor(getIconWidth() / 2);
g.drawLine(midx, y, getIconWidth(), y + midy); int midy = (int) Math.floor(getIconHeight() / 2);
g.drawLine(0, y + midy + 1, midx, y + 1); g.drawLine(0, y, midx, midy + y);
g.drawLine(midx, y + 1, getIconWidth(), y + midy + 1); g.drawLine(midx, y + midy, getIconWidth(), y);
g.drawLine(0, y + 1, midx, midy + y + 1);
} g.drawLine(midx, y + midy + 1, getIconWidth(), y + 1);
void drawArrowDown(Graphics g, int y) { }
int midx = (int) Math.floor(getIconWidth() / 2); public static void main(String[] args) {
int midy = (int) Math.floor(getIconHeight() / 2); de.memtext.widgets.MBFrame f = new de.memtext.widgets.MBFrame("test");
g.drawLine(0, y, midx, midy + y); f.setCenter(new JButton("test", new ArrowRight()));
g.drawLine(midx, y + midy, getIconWidth(), y); f.pack();
g.drawLine(0, y + 1, midx, midy + y + 1); f.show();
g.drawLine(midx, y + midy + 1, getIconWidth(), y + 1); }
public void setIconHeight(int i) {
} iconHeight = i;
}
public static void main(String[] args) {
de.memtext.widgets.MBFrame f = new de.memtext.widgets.MBFrame("test"); public void setIconWidth(int i) {
f.setCenter(new JButton("test", new ArrowRight())); iconWidth = i;
f.pack(); }
f.show();
} public Color getColor() {
return color;
public void setIconHeight(int i) { }
iconHeight = i;
} public void setColor(Color color) {
this.color = color;
public void setIconWidth(int i) { }
iconWidth = i;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
} }

10
src/de/memtext/icons/DoubleArrowDownIcon.java

@ -4,13 +4,13 @@ import java.awt.Graphics;
public class DoubleArrowDownIcon extends BasicIcon { public class DoubleArrowDownIcon extends BasicIcon {
@Override public void myPaint(Graphics g)
public void myPaint(Graphics g) { {
drawArrowDown(g, 2); drawArrowDown(g,2);
drawArrowDown(g, 6); drawArrowDown(g,6);
} }
} }

12
src/de/memtext/icons/DoubleArrowDownLineIcon.java

@ -11,13 +11,13 @@ import java.awt.Graphics;
* Window>Preferences>Java>Code Generation. * Window>Preferences>Java>Code Generation.
*/ */
public class DoubleArrowDownLineIcon extends BasicIcon { public class DoubleArrowDownLineIcon extends BasicIcon {
@Override public void myPaint(Graphics g)
public void myPaint(Graphics g) { {
drawArrowDown(g, 0); drawArrowDown(g,0);
drawArrowDown(g, 4); drawArrowDown(g,4);
drawDoubleLine(g, getIconHeight() - 2); drawDoubleLine(g,getIconHeight()-2);
} }
} }

10
src/de/memtext/icons/DoubleArrowUpIcon.java

@ -11,12 +11,12 @@ import java.awt.Graphics;
* Window>Preferences>Java>Code Generation. * Window>Preferences>Java>Code Generation.
*/ */
public class DoubleArrowUpIcon extends BasicIcon { public class DoubleArrowUpIcon extends BasicIcon {
@Override public void myPaint(Graphics g)
public void myPaint(Graphics g) { {
drawArrowUp(g, 0); drawArrowUp(g,0);
drawArrowUp(g, 4); drawArrowUp(g,4);
} }
} }

12
src/de/memtext/icons/DoubleArrowUpLineIcon.java

@ -11,13 +11,13 @@ import java.awt.Graphics;
* Window>Preferences>Java>Code Generation. * Window>Preferences>Java>Code Generation.
*/ */
public class DoubleArrowUpLineIcon extends BasicIcon { public class DoubleArrowUpLineIcon extends BasicIcon {
@Override public void myPaint(Graphics g)
public void myPaint(Graphics g) { {
drawDoubleLine(g, 0); drawDoubleLine(g,0);
drawArrowUp(g, 2); drawArrowUp(g,2);
drawArrowUp(g, 6); drawArrowUp(g,6);
} }
} }

172
src/de/memtext/icons/MBStandardIcons.java

@ -10,90 +10,92 @@ import de.memtext.util.IconUtils;
changed xxx changed xxx
*/ */
public class MBStandardIcons { public class MBStandardIcons {
private static ImageIcon indexBox, newDoc, copyWin, searchWin, viewingGlass, table, delete, properties; private static ImageIcon indexBox,
newDoc,
private static ClassLoader cl; copyWin,
searchWin,
/** viewingGlass,
* Constructor for StandardIcons. table,
*/ delete,
private MBStandardIcons() { properties;
private static ClassLoader cl;
} /**
* Constructor for StandardIcons.
public static ImageIcon get(String name) { */
return IconUtils.get("de/memtext/icons/" + name); private MBStandardIcons() {
}
}
static { public static ImageIcon get(String name) {
MBStandardIcons s = new MBStandardIcons(); return IconUtils.get("de/memtext/icons/" + name);
cl = s.getClass().getClassLoader(); }
copyWin = new ImageIcon(cl.getResource("de/memtext/icons/copyWindows.gif")); static {
searchWin = new ImageIcon(cl.getResource("de/memtext/icons/searchWindows.gif")); MBStandardIcons s = new MBStandardIcons();
viewingGlass = new ImageIcon(cl.getResource("de/memtext/icons/viewingGlass.gif")); cl = s.getClass().getClassLoader();
table = new ImageIcon(cl.getResource("de/memtext/icons/table.gif")); copyWin =
newDoc = new ImageIcon(cl.getResource("de/memtext/icons/newDoc.gif")); new ImageIcon(cl.getResource("de/memtext/icons/copyWindows.gif"));
delete = new ImageIcon(cl.getResource("de/memtext/icons/delete.gif")); searchWin =
properties = new ImageIcon(cl.getResource("de/memtext/icons/properties.gif")); new ImageIcon(cl.getResource("de/memtext/icons/searchWindows.gif"));
indexBox = new ImageIcon(cl.getResource("de/memtext/icons/indexBox.gif")); viewingGlass =
} new ImageIcon(cl.getResource("de/memtext/icons/viewingGlass.gif"));
table = new ImageIcon(cl.getResource("de/memtext/icons/table.gif"));
public static ImageIcon getEntry() { newDoc = new ImageIcon(cl.getResource("de/memtext/icons/newDoc.gif"));
return new ImageIcon(cl.getResource("de/memtext/icons/entry.gif")); delete = new ImageIcon(cl.getResource("de/memtext/icons/delete.gif"));
} properties =
new ImageIcon(cl.getResource("de/memtext/icons/properties.gif"));
public static ImageIcon getCopy() { indexBox =
return copyWin; new ImageIcon(cl.getResource("de/memtext/icons/indexBox.gif"));
} }
public static ImageIcon getEntry() {
public static ImageIcon getSearch() { return new ImageIcon(cl.getResource("de/memtext/icons/entry.gif"));
return searchWin; }
} public static ImageIcon getCopy() {
return copyWin;
public static ImageIcon getDelete() { }
return delete; public static ImageIcon getSearch() {
} return searchWin;
}
public static ImageIcon getPrint() { public static ImageIcon getDelete() {
return new ImageIcon(cl.getResource("de/memtext/icons/print.gif")); return delete;
}
public static ImageIcon getPrint()
} {
return new ImageIcon(cl.getResource("de/memtext/icons/print.gif"));
public static ImageIcon getProperties() {
return properties;
} }
public static ImageIcon getProperties() {
/** return properties;
* Returns the table. }
* @return ImageIcon /**
*/ * Returns the table.
public static ImageIcon getTable() { * @return ImageIcon
return table; */
} public static ImageIcon getTable() {
return table;
/** }
* Returns the viewingGlass.
* @return ImageIcon /**
*/ * Returns the viewingGlass.
public static ImageIcon getViewingGlass() { * @return ImageIcon
return viewingGlass; */
} public static ImageIcon getViewingGlass() {
return viewingGlass;
/** }
* Returns the newDoc.
* @return ImageIcon /**
*/ * Returns the newDoc.
public static ImageIcon getNewDoc() { * @return ImageIcon
return newDoc; */
} public static ImageIcon getNewDoc() {
return newDoc;
/** }
* Returns the indexBox.
* @return ImageIcon /**
*/ * Returns the indexBox.
public static ImageIcon getIndexBox() { * @return ImageIcon
return indexBox; */
} public static ImageIcon getIndexBox() {
return indexBox;
}
} }

28
src/de/memtext/lang/SingOrPluralWord.java

@ -0,0 +1,28 @@
package de.memtext.lang;
public class SingOrPluralWord {
public final static SingOrPluralWord SEIN=new SingOrPluralWord("ist","sind");
private int count;
private String singular,plural;
public SingOrPluralWord(String singular,String plural) {
this.singular=singular;
this.plural=plural;
}
public static String format(int count,String sing,String plural)
{
if (count==1) return count+" "+sing;
else
return count+" "+plural;
}
public String say(int count)
{
if (count==1) return singular;
else
return plural;
}
}
//Created on 12.12.2003 at 15:53:43

43
src/de/memtext/observ/DocumentListenerObserver.java

@ -2,35 +2,30 @@ package de.memtext.observ;
import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener; import javax.swing.event.DocumentListener;
/** /**
* A document listener that will inform an observable about changes * A document listener that will inform an observable about changes
* in the document * in the document
*/ */
public class DocumentListenerObserver implements DocumentListener { public class DocumentListenerObserver implements DocumentListener {
private MyObservable observable; private MyObservable observable;
public DocumentListenerObserver(MyObservable observable) {
public DocumentListenerObserver(MyObservable observable) { this.observable= observable;
this.observable = observable; }
}
public void insertUpdate(DocumentEvent e) {
@Override observable.markChanged();
public void insertUpdate(DocumentEvent e) { observable.notifyObservers();
observable.markChanged(); }
observable.notifyObservers();
} public void removeUpdate(DocumentEvent e) {
observable.markChanged();
@Override observable.notifyObservers();
public void removeUpdate(DocumentEvent e) { }
observable.markChanged();
observable.notifyObservers(); public void changedUpdate(DocumentEvent e) {
} observable.markChanged();
observable.notifyObservers();
@Override }
public void changedUpdate(DocumentEvent e) {
observable.markChanged();
observable.notifyObservers();
}
} }

6
src/de/memtext/observ/MyObservable.java

@ -10,8 +10,8 @@ import java.util.Observable;
public class MyObservable extends Observable implements Serializable { public class MyObservable extends Observable implements Serializable {
public void markChanged() { public void markChanged() {
super.setChanged(); super.setChanged();
} }
} }

171
src/de/memtext/rights/AllowableHierarchyUtil.java

@ -11,94 +11,107 @@ import de.memtext.tree.TreeEntryI;
public class AllowableHierarchyUtil { public class AllowableHierarchyUtil {
/** /**
* Entfernt unerlaubte Blätter und Äste, in denen es gar keine erlaubten * Entfernt unerlaubte Blätter und Äste, in denen es gar keine erlaubten
* Knoten gibt * Knoten gibt
* *
* @param root * @param root
* must also extend DefaultMutableTreeNode * must also extend DefaultMutableTreeNode
*/ */
public static void removeUnallowedNodes(AllowableHierarchy root) { public static void removeUnallowedNodes(AllowableHierarchy root) {
if (!(root instanceof DefaultMutableTreeNode)) throw new IllegalArgumentException(" must be a node!"); if (!(root instanceof DefaultMutableTreeNode))
DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) root; throw new IllegalArgumentException(" must be a node!");
boolean needAnotherRound = true, killedOne = false; DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) root;
boolean needAnotherRound = true, killedOne = false;
while (needAnotherRound) { while (needAnotherRound) {
killedOne = false; killedOne = false;
for (Enumeration en = rootNode.breadthFirstEnumeration(); en.hasMoreElements();) { for (Enumeration en = rootNode.breadthFirstEnumeration(); en
Object o = en.nextElement(); .hasMoreElements();) {
if (o == root) continue; Object o = en.nextElement();
AllowableHierarchy ah = (AllowableHierarchy) o; if (o == root)
continue;
AllowableHierarchy ah = (AllowableHierarchy) o;
if (!ah.isAnyDescendantAllowed()) { if (!ah.isAnyDescendantAllowed()) {
// System.out.println("removing: "+ah); // System.out.println("removing: "+ah);
DefaultMutableTreeNode node = ((DefaultMutableTreeNode) ah); DefaultMutableTreeNode node = ((DefaultMutableTreeNode) ah);
markParentsAsNotAllowed(node); markParentsAsNotAllowed(node);
node.removeFromParent(); node.removeFromParent();
killedOne = true; killedOne = true;
break; break;
} }
} }
if (killedOne == false) needAnotherRound = false; if (killedOne == false)
} needAnotherRound = false;
}
} }
private static void markParentsAsNotAllowed(DefaultMutableTreeNode node) { private static void markParentsAsNotAllowed(DefaultMutableTreeNode node) {
if (!node.isRoot() && node instanceof Allowable) { if (!node.isRoot()&& node instanceof Allowable) {
Allowable al = null; Allowable al = null;
if (node.getParent() instanceof Allowable) al = (Allowable) node.getParent(); if (node.getParent() instanceof Allowable)
al.setAllowed(false); al = (Allowable) node.getParent();
al.setAllowed(false);
markParentsAsNotAllowed((DefaultMutableTreeNode) node.getParent()); markParentsAsNotAllowed((DefaultMutableTreeNode) node
} .getParent());
}
} }
/** /**
* Restrukturiert einen Baum, so dass nicht erlaubte "Zwischenäste" entfernt * Restrukturiert einen Baum, so dass nicht erlaubte "Zwischenäste" entfernt
* werden. root - noterl - erl3 * werden. root - noterl - erl3
* *
* wird root - erl3 * wird root - erl3
* *
* @param root * @param root
*/ */
public static void reorg(AllowableHierarchy root) { public static void reorg(AllowableHierarchy root) {
if (!(root instanceof DefaultMutableTreeNode)) throw new IllegalArgumentException(" must be a node!"); if (!(root instanceof DefaultMutableTreeNode))
DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) root; throw new IllegalArgumentException(" must be a node!");
boolean needAnotherRound = true; DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) root;
List nodeList = new LinkedList(); boolean needAnotherRound = true;
while (needAnotherRound) { List nodeList = new LinkedList();
nodeList.clear(); while (needAnotherRound) {
needAnotherRound = false; nodeList.clear();
for (int i = 0; i < rootNode.getChildCount(); i++) { needAnotherRound = false;
AllowableHierarchy ah = (AllowableHierarchy) rootNode.getChildAt(i); for (int i = 0; i < rootNode.getChildCount(); i++) {
if (!ah.isAllowed()) { AllowableHierarchy ah = (AllowableHierarchy) rootNode
needAnotherRound = true; .getChildAt(i);
((DefaultMutableTreeNode) ah).removeFromParent(); if (!ah.isAllowed()) {
for (int i2 = 0; i2 < ((DefaultMutableTreeNode) ah).getChildCount(); i2++) needAnotherRound = true;
nodeList.add(((DefaultMutableTreeNode) ah).getChildAt(i2)); ((DefaultMutableTreeNode) ah).removeFromParent();
} for (int i2 = 0; i2 < ((DefaultMutableTreeNode) ah)
} .getChildCount(); i2++)
for (Iterator it = nodeList.iterator(); it.hasNext();) { nodeList.add(((DefaultMutableTreeNode) ah)
rootNode.add((DefaultMutableTreeNode) it.next()); .getChildAt(i2));
} }
} }
} for (Iterator it = nodeList.iterator(); it.hasNext();) {
rootNode.add((DefaultMutableTreeNode) it.next());
}
}
}
public static void markNotAllowedNodes(AllowableHierarchy root, String mark) { public static void markNotAllowedNodes(AllowableHierarchy root, String mark) {
if (!(root instanceof DefaultMutableTreeNode)) throw new IllegalArgumentException(" must be a node!"); if (!(root instanceof DefaultMutableTreeNode))
DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) root; throw new IllegalArgumentException(" must be a node!");
int i = 0; DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) root;
for (Enumeration en = rootNode.breadthFirstEnumeration(); en.hasMoreElements();) { int i = 0;
AllowableHierarchy ah = (AllowableHierarchy) en.nextElement(); for (Enumeration en = rootNode.breadthFirstEnumeration(); en
if (!ah.isAllowed()) { .hasMoreElements();) {
TreeEntryI te = (TreeEntryI) ah; AllowableHierarchy ah = (AllowableHierarchy) en.nextElement();
if (!te.getName().endsWith(mark)) te.setName(te.getName() + mark); if (!ah.isAllowed()) {
} TreeEntryI te = (TreeEntryI) ah;
} if (!te.getName().endsWith(mark))
} te.setName(te.getName() + mark);
}
}
}
} }
// Created on 24.04.2005 at 08:05:45 // Created on 24.04.2005 at 08:05:45

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save