Changeset 1371

Show
Ignore:
Timestamp:
07/25/08 11:51:07 (4 years ago)
Author:
eitan
Message:

adding support for natural primary keys (see demo-app Sympster entity Talk for illustration of its usage

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • jmatter-complet/branches/TRY-JPA/JMatter.iws

    r1365 r1371  
    1717  <component name="ChangeListManager"> 
    1818    <list default="true" name="Default" comment=""> 
    19       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Speaker.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Speaker.java" /> 
    20       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jmatter/lib/tools/jmatter-tools.jar" afterPath="$PROJECT_DIR$/jmatter/lib/tools/jmatter-tools.jar" /> 
    21       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/IssueMgr/IssueMgr.iml" afterPath="$PROJECT_DIR$/demo-apps/IssueMgr/IssueMgr.iml" /> 
    22       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/Sympster.iml" afterPath="$PROJECT_DIR$/demo-apps/Sympster/Sympster.iml" /> 
    23       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test-app/src/com/u2d/domain/AtomicMedley.java" afterPath="$PROJECT_DIR$/test-app/src/com/u2d/domain/AtomicMedley.java" /> 
    24       <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/jmatter/lib/runtime/ejb3-persistence.jar" /> 
    25       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/MyTunes/src/com/u2d/mytunes/Genre.java" afterPath="$PROJECT_DIR$/demo-apps/MyTunes/src/com/u2d/mytunes/Genre.java" /> 
    26       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Self/src/com/u2d/self/Ball.java" afterPath="$PROJECT_DIR$/demo-apps/Self/src/com/u2d/self/Ball.java" /> 
     19      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jmatter/src/com/u2d/model/AbstractComplexEObject.java" afterPath="$PROJECT_DIR$/jmatter/src/com/u2d/model/AbstractComplexEObject.java" /> 
    2720      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/jmatter/src/com/u2d/persist/PKGen.java" /> 
    2821      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/jmatter/src/com/u2d/persist/PKField.java" /> 
    29       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/BOF.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/BOF.java" /> 
    30       <change type="DELETED" beforePath="$PROJECT_DIR$/jmatter/src/com/u2d/persist/Persist.java" afterPath="" /> 
    31       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Self/Self.iml" afterPath="$PROJECT_DIR$/demo-apps/Self/Self.iml" /> 
    32       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Campus.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Campus.java" /> 
    33       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/IssueMgr/src/com/u2d/issuemgr/IssueCategory.java" afterPath="$PROJECT_DIR$/demo-apps/IssueMgr/src/com/u2d/issuemgr/IssueCategory.java" /> 
    34       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/ContactMgr/src/com/u2d/contactmgr/PersonContact.java" afterPath="$PROJECT_DIR$/demo-apps/ContactMgr/src/com/u2d/contactmgr/PersonContact.java" /> 
    35       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test-app/src/com/u2d/domain/Resource.java" afterPath="$PROJECT_DIR$/test-app/src/com/u2d/domain/Resource.java" /> 
    36       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test-app/src/com/u2d/domain/Meeting.java" afterPath="$PROJECT_DIR$/test-app/src/com/u2d/domain/Meeting.java" /> 
     22      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Talk.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Talk.java" /> 
     23      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/jmatter/src/com/u2d/persist/PKGenStrategy.java" /> 
    3724      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jmatter/src/com/u2d/persist/HBMMaker.java" afterPath="$PROJECT_DIR$/jmatter/src/com/u2d/persist/HBMMaker.java" /> 
    38       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/City.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/City.java" /> 
    3925      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jmatter/src/com/u2d/element/Field.java" afterPath="$PROJECT_DIR$/jmatter/src/com/u2d/element/Field.java" /> 
    40       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Room.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Room.java" /> 
    41       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/JMatter.ipr" afterPath="$PROJECT_DIR$/JMatter.ipr" /> 
    42       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jmatter/src/com/u2d/model/AbstractComplexEObject.java" afterPath="$PROJECT_DIR$/jmatter/src/com/u2d/model/AbstractComplexEObject.java" /> 
    43       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/JMatter.iws" afterPath="$PROJECT_DIR$/JMatter.iws" /> 
    44       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test-app/src/com/u2d/domain/Painting.java" afterPath="$PROJECT_DIR$/test-app/src/com/u2d/domain/Painting.java" /> 
    45       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/IssueMgr/src/com/u2d/issuemgr/Issue.java" afterPath="$PROJECT_DIR$/demo-apps/IssueMgr/src/com/u2d/issuemgr/Issue.java" /> 
    46       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jmatter/src/com/u2d/interaction/Instruction.java" afterPath="$PROJECT_DIR$/jmatter/src/com/u2d/interaction/Instruction.java" /> 
    47       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/MyTunes/src/com/u2d/mytunes/Album.java" afterPath="$PROJECT_DIR$/demo-apps/MyTunes/src/com/u2d/mytunes/Album.java" /> 
    48       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Hotel.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Hotel.java" /> 
    49       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/ConferenceCenter.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/ConferenceCenter.java" /> 
    50       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test-app/src/com/u2d/domain/OrderItem.java" afterPath="$PROJECT_DIR$/test-app/src/com/u2d/domain/OrderItem.java" /> 
    51       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test-app/src/com/u2d/domain/TestVisit.java" afterPath="$PROJECT_DIR$/test-app/src/com/u2d/domain/TestVisit.java" /> 
    52       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test-app/src/com/u2d/domain/Order.java" afterPath="$PROJECT_DIR$/test-app/src/com/u2d/domain/Order.java" /> 
    53       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jmatter/tools/IDEA/ACO.java" afterPath="$PROJECT_DIR$/jmatter/tools/IDEA/ACO.java" /> 
    54       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Session.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Session.java" /> 
    55       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Self/src/com/u2d/self/Space.java" afterPath="$PROJECT_DIR$/demo-apps/Self/src/com/u2d/self/Space.java" /> 
    56       <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/jmatter/src/com/u2d/persist/PKGenStrategy.java" /> 
    57       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Event.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Event.java" /> 
    58       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Symposium.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Symposium.java" /> 
    59       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Talk.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Talk.java" /> 
    60       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Venue.java" afterPath="$PROJECT_DIR$/demo-apps/Sympster/src/com/u2d/sympster/Venue.java" /> 
    61       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/AppBrowser/AppBrowser.iml" afterPath="$PROJECT_DIR$/AppBrowser/AppBrowser.iml" /> 
    62       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jmatter/src/com/u2d/persist/ReverseEngineer.java" afterPath="$PROJECT_DIR$/jmatter/src/com/u2d/persist/ReverseEngineer.java" /> 
    63       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/MyTunes/MyTunes.iml" afterPath="$PROJECT_DIR$/demo-apps/MyTunes/MyTunes.iml" /> 
    64       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/MyTunes/src/com/u2d/mytunes/Artist.java" afterPath="$PROJECT_DIR$/demo-apps/MyTunes/src/com/u2d/mytunes/Artist.java" /> 
    65       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jmatter/Core.iml" afterPath="$PROJECT_DIR$/jmatter/Core.iml" /> 
    66       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/demo-apps/MyTunes/src/com/u2d/mytunes/Song.java" afterPath="$PROJECT_DIR$/demo-apps/MyTunes/src/com/u2d/mytunes/Song.java" /> 
    67       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/AppBrowser/src/com/u2d/appbrowser/AppBookmark.java" afterPath="$PROJECT_DIR$/AppBrowser/src/com/u2d/appbrowser/AppBookmark.java" /> 
    68       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/test-app/src/com/u2d/domain/Shipment.java" afterPath="$PROJECT_DIR$/test-app/src/com/u2d/domain/Shipment.java" /> 
    69       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/modules/jmatter-tools/src/com/u2d/tools/AntPersistClassesMaker.java" afterPath="$PROJECT_DIR$/modules/jmatter-tools/src/com/u2d/tools/AntPersistClassesMaker.java" /> 
    7026      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/jmatter/src/com/u2d/model/ComplexType.java" afterPath="$PROJECT_DIR$/jmatter/src/com/u2d/model/ComplexType.java" /> 
    7127    </list> 
     
    155111  </component> 
    156112  <component name="FileEditorManager"> 
    157     <leaf> 
    158       <file leaf-file-name="HBMMaker.java" pinned="false" current="true" current-in-tab="true"> 
    159         <entry file="file://$PROJECT_DIR$/jmatter/src/com/u2d/persist/HBMMaker.java"> 
    160           <provider selected="true" editor-type-id="text-editor"> 
    161             <state line="658" column="3" selection-start="21624" selection-end="21624" vertical-scroll-proportion="0.3109843"> 
    162               <folding /> 
    163             </state> 
    164           </provider> 
    165         </entry> 
    166       </file> 
    167     </leaf> 
     113    <leaf /> 
    168114  </component> 
    169115  <component name="FindManager"> 
     
    12431189    <entry file="file://$PROJECT_DIR$/jmatter/src/com/u2d/persist/HBMMaker.java"> 
    12441190      <provider selected="true" editor-type-id="text-editor"> 
    1245         <state line="658" column="3" selection-start="21624" selection-end="21624" vertical-scroll-proportion="0.3109843"> 
     1191        <state line="109" column="6" selection-start="3158" selection-end="3158" vertical-scroll-proportion="0.33238232"> 
    12461192          <folding /> 
    12471193        </state> 
  • jmatter-complet/branches/TRY-JPA/demo-apps/Sympster/src/com/u2d/sympster/Talk.java

    r1365 r1371  
    66import com.u2d.type.atom.TextEO; 
    77import com.u2d.reflection.Fld; 
     8import com.u2d.persist.PKField; 
     9import com.u2d.persist.PKGen; 
     10import com.u2d.persist.PKGenStrategy; 
    811import javax.persistence.Entity; 
    912import java.awt.Color; 
    1013 
     14/* 
     15Implemented in this way to illustrate how to allow for a table with a natural primary key (legacy) 
     16 in a JMatter application. 
     17 */ 
    1118@Entity 
     19@PKField("title") 
     20@PKGen(strategy= PKGenStrategy.ASSIGNED) 
    1221public class Talk extends AbstractComplexEObject implements Event 
    1322{ 
  • jmatter-complet/branches/TRY-JPA/jmatter/src/com/u2d/element/Field.java

    r1349 r1371  
    480480   public boolean isTabView() { return _tabView; } 
    481481   public void setTabView(boolean isTabView) { _tabView = isTabView; } 
    482     
     482 
     483   private boolean _pkfield = false; 
     484   public void setPK(boolean ispk) { _pkfield = ispk; } 
     485   public boolean pk() { return _pkfield; } 
     486 
    483487   public void applyMetadata() 
    484488   { 
  • jmatter-complet/branches/TRY-JPA/jmatter/src/com/u2d/model/AbstractComplexEObject.java

    r1336 r1371  
    2828import com.u2d.list.CompositeList; 
    2929import com.u2d.app.Tracing; 
     30import org.hibernate.NonUniqueObjectException; 
    3031 
    3132/** 
     
    662663                   "Created new " + type() + " object - " + title()); 
    663664            return null; 
     665         } 
     666         catch (NonUniqueObjectException ex) 
     667         { 
     668            log(LoggedEvent.ERROR, cmdInfo.getCommand(), DUPLICATE_KEY_CONSTRAINT_ERROR_MSG); 
     669            fireValidationException(DUPLICATE_KEY_CONSTRAINT_ERROR_MSG); 
     670            return DUPLICATE_KEY_CONSTRAINT_ERROR_MSG; 
    664671         } 
    665672         catch (org.hibernate.exception.ConstraintViolationException ex) 
  • jmatter-complet/branches/TRY-JPA/jmatter/src/com/u2d/model/ComplexType.java

    r1365 r1371  
    180180      } 
    181181   } 
     182   public boolean specifiesPKField() 
     183   { 
     184      return (_clazz.isAnnotationPresent(PKField.class)); 
     185   } 
     186   public String pkFieldname() 
     187   { 
     188      PKField annotation = (PKField) _clazz.getAnnotation(PKField.class); 
     189      return annotation.value(); 
     190   } 
     191   public boolean specifiesPKGenStrategy() 
     192   { 
     193      return (_clazz.isAnnotationPresent(PKGen.class)); 
     194   } 
     195   public PKGenStrategy pkGenStrategy() 
     196   { 
     197      PKGen annotation = (PKGen) _clazz.getAnnotation(PKGen.class); 
     198      return annotation.strategy(); 
     199   } 
    182200 
    183201   private void harvest() 
  • jmatter-complet/branches/TRY-JPA/jmatter/src/com/u2d/persist/HBMMaker.java

    r1365 r1371  
    135135         else if (field.isAtomic()) 
    136136         { 
    137             produceProperty(parentElem, (AtomicField) field, prefix); 
     137            if (!field.pk()) 
     138            { 
     139               produceProperty(parentElem, (AtomicField) field, prefix); 
     140            } 
    138141         } 
    139142         else if (field.isInterfaceType() && !field.isIndexed()) 
     
    657660      return false; 
    658661   } 
    659     
     662 
    660663   private Element produceIDProperty(Element parentElem) 
     664   { 
     665      if (_type.specifiesPKField()) 
     666      { 
     667         String pkfieldname = _type.pkFieldname(); 
     668         Field pkfield = _type.field(pkfieldname); 
     669         pkfield.setPK(true); 
     670         Element idElem = parentElem.addElement("id"); 
     671         idElem.addAttribute("name", pkfield.name()); 
     672 
     673         Class typeClass = getUserType(pkfield); 
     674         idElem.addAttribute("type", typeClass.getName()); 
     675         addAccessAttribute(idElem); 
     676 
     677         Element idGenElem = idElem.addElement("generator"); 
     678         if (_type.specifiesPKGenStrategy()) 
     679         { 
     680            idGenElem.addAttribute("class", _type.pkGenStrategy().strategyName()); 
     681            // TODO: handle argument type for strategy.  e.g. sequence name. 
     682         } 
     683         else 
     684         { 
     685            idGenElem.addAttribute("class", "native"); 
     686         } 
     687         return idElem; 
     688      } 
     689      else 
     690      { 
     691         return produceDefaultIDProperty(parentElem); 
     692      } 
     693   } 
     694   private Element produceDefaultIDProperty(Element parentElem) 
    661695   { 
    662696      Element idElem = parentElem.addElement("id");