entityinstallationaction.java
来自「CRM源码This file describes some issues tha」· Java 代码 · 共 1,805 行 · 第 1/5 页
JAVA
1,805 行
if( fkeys == null ) { // create new one fkeys = new Fkeys(); fkeys.setCascadeDelete( Boolean.TRUE ); entity.addFkeys( fkeys ); } // set foreign entity name fkeys.setFkEntity( refEntityName ); } /** * Get chain between two entities and return ChainTable object * @param e1 entity 1 name * @param e2 entity 2 name * @return ChainTable object */ private ChainTable getChainTable( String e1, String e2 ) { ChainTable chainTab = null; Entity entity1 = getEntityViewConfig( e1 ); Entity entity2 = getEntityViewConfig( e2 ); String dbobj1 = entity1.getDbobject(); String dbobj2 = entity2.getDbobject(); for( int i = 0; i < chainList.size(); i++ ) { Chain chain = ( Chain ) chainList.get( i ); String _e1 = chain.getE1(); String _e2 = chain.getE2(); if( ! ( e1.equals( _e1 ) && e2.equals( _e2 ) ) && ! ( e2.equals( _e1 ) && e1.equals( _e2 ) ) ) { continue; } chainTab = new ChainTable(); chainTab.setEntity( e2 ); Dsref dsref = chain.getDsref(); Chainref chainRef = chain.getChainref(); Nods noDs = chain.getNods(); if( dsref != null ) { // we have Dsref objects in Chain String name = dsref.getName(); Object ref = dataschemaTable.get( name ); if( ref == null ) { throw new GenericSystemException( "Cannot find dataschema by the chain name '" + name + "'" ); } Dataschema ds = ( Dataschema ) ref; String t1 = ds.getTable( 0 ).getName(); String t2 = ds.getTable( 1 ).getName(); if (dbobj1.equals( t1 ) && dbobj2.equals ( t2 ) && t1.equals( t2 )) { if (e2.equals (_e1) && e1.equals( _e2 )) ds = invertDataschema( ds ); } else if( dbobj1.equals( t1 ) && dbobj2.equals( t2 ) ) { // direct order // (do nothing) } else if( dbobj1.equals( t2 ) && dbobj2.equals( t1 ) ) { // invert direct order ds = invertDataschema( ds ); } else { // error (unknown table) throw new GenericSystemException( "Incorrect t1='" + t1 + "' and t2='" + t2 + "' attributes found in chain '" + name + "'" ); } chainTab.setDataschema( ds ); // remember name chainTab.putObject( ds.getName(), ds ); } else if( chainRef != null ) { // we have Chainref object in Chain chainTab.setChainref( chainRef ); } else { // we don't have physical links between entities chainTab.setNods( noDs ); } break; } return chainTab; } /** * Get dataschema between two dbobjects * @param db1 dbobject attribute of entity 1 * @param src1 Efield object src attribute taken from entity 1 (can be NULL) * @param db2 dbobject attribute of entity 2 * @param dsName dataschema name (can be NULL) * @return Dataschema object */ private Dataschema getDataschema( String db1, String src1, String db2, String dsName ) { Dataschema ds = null; // check input params if( src1 == null && dsName == null ) { throw new GenericSystemException( "Please specify 'src1' or 'dsName' attributes" ); } Iterator iter = dataschemaNames.iterator(); while( iter.hasNext() ) { String name = ( String ) iter.next(); Dataschema dataschema = ( Dataschema ) dataschemaTable.get( name ); String _dbobject1 = dataschema.getTable( 0 ).getName(); String _dbobject2 = dataschema.getTable( 1 ).getName(); String[] _keys1 = dataschema.getTable( 0 ).getKey(); String[] _keys2 = dataschema.getTable( 1 ).getKey(); if( dsName != null && !dsName.equals( name ) ) { continue; } if( db1.equalsIgnoreCase( _dbobject1 ) && db2.equalsIgnoreCase( _dbobject2 ) && ( dsName != null || src1.equalsIgnoreCase( _keys1[0] ) ) ) { /** @todo search src1 in entire array _keys1 */ // right order ds = dataschema; break; } else if( db2.equalsIgnoreCase( _dbobject1 ) && db1.equalsIgnoreCase( _dbobject2 ) && ( dsName != null || src1.equalsIgnoreCase( _keys2[0] ) ) ) { // reverse order ds = invertDataschema( dataschema ); break; } } return ds; } /** * Get EntitySchema object * @param entity Entity object * @return EntitySchema */ private EntitySchema getEntitySchema( Entity entity ) { String schema = entity.getDbschema(); if( schema == null ) { return EntitySchemaFactory.getInstance().get(); } else { return EntitySchemaFactory.getInstance().get( schema ); } } /** * Get DB object information from schema * @param entity Entity object * @return EntityDdobjectInfoVO object */ private EntityDdobjectInfoVO getEntityDdobjectInfo( Entity entity ) { if( entity.getInitialized().booleanValue() ) { throw new IllegalStateException( "Entity '" + entity.getName() + "' already initialized..." ); } String dbobject = entity.getDbobject(); EntityDdobjectInfoVO tableInfo = ( EntityDdobjectInfoVO ) dbInfoTable.get( dbobject ); if( tableInfo == null ) { tableInfo = getEntitySchema( entity ).getEntityDdobjectInfo( dbobject ); dbInfoTable.put( dbobject, tableInfo ); } return tableInfo; } /** * Get entity field information from schema * @param entity Entity object * @param efield Efield object * @return EntityFieldInfoVO object */ private EntityFieldInfoVO getEntityFieldInfo( Entity entity, Efield efield ) { String dbcolumn = efield.getName(); EntityDdobjectInfoVO dbobjectInfo = getEntityDdobjectInfo( entity ); for( int i = 0; i < dbobjectInfo.getFieldSize(); i++ ) { EntityFieldInfoVO entityFieldInfo = dbobjectInfo.getField( i ); if( dbcolumn.equalsIgnoreCase( entityFieldInfo.getDbcolumnName() ) ) { return entityFieldInfo; } } return null; } /** * Invert dataschema table order * @param ds Dataschema object * @return inverting dataschema */ private Dataschema invertDataschema( Dataschema ds ) { Dataschema newds = new Dataschema(); xmlBind.copyAttributes( ds, newds, Dataschema.class ); newds.addTable( ds.getTable( 1 ) ); newds.addTable( ds.getTable( 0 ) ); if( ds.getReftype().toString().equals( "1:n" ) ) { newds.setReftype( RefSType.valueOf( "n:1" ) ); } else if( ds.getReftype().toString().equals( "n:1" ) ) { newds.setReftype( RefSType.valueOf( "1:n" ) ); } return newds; } /** * Deploy entity view configs as Entity EJBs */ private void deployEntityViewConfigs() { Entity[] entities = null; try { if( INITIAL_ENTITY_SIZE == 0 ) { // deploy all entities entities = ( Entity[] ) entityTable.values().toArray( new Entity[0] ); getEntityViewConfigManager().fillEntityViewConfigs( entities ); } else { // deploy only new entities EntityViewConfigManager entityViewConfigManager = getEntityViewConfigManager(); int entity_count = entityNames.size(); entities = new Entity[entity_count - INITIAL_ENTITY_SIZE]; int count = 0; for( int i = INITIAL_ENTITY_SIZE; i < entity_count; i++ ) { String entityName = ( String ) entityNames.get( i ); Entity entity = getEntityViewConfig( entityName ); entityViewConfigManager.deleteEntityViewConfig( entityName ); entityViewConfigManager.createEntityViewConfig( entity ); entities[count] = entity; count++; } } if( entityOutDeployFile != null ) { // write log try { for( int i = 0; i < entities.length; i++ ) { Entity entity = entities[i]; String name = entity.getName(); File outFile = new File( entityOutDeployFile, name + ".xml" ); FileOutputStream fos = new FileOutputStream( outFile ); xmlBind.javaToXml( entity, new PrintWriter( new OutputStreamWriter( fos, "UTF-8" ) ) ); fos.close(); } } catch( SecurityException ex ) { ERROR( ex ); } catch( IOException ex ) { ERROR( ex ); } } } catch( RemoteException ex ) { ERROR( ex ); throw new GenericSystemException( "Remote exception. Cannot deploy entity configs: " + ex.getMessage(), ex ); } } /** * Remove all variables ($entity, etc.) from string <code>s</code> * @param entity Entity object * @param s string * @return new string */ private String makeVariableSubstitution( Entity entity, String s ) { return makeVariableSubstitution( entity.getName(), entity.getDbobject(), s ); } // // Substitute all variables // private String makeVariableSubstitution( String entityName, String dbObject, String s ) { String ret = s; ret = makeEntityVariableSubstitution( entityName, ret ); ret = makeDbObjectVariableSubstitution( dbObject, ret ); return ret; } // // Substitute $entity variable // private String makeEntityVariableSubstitution( String entityName, String s ) { try { return new RE( ENTITY_VAR ).subst( s, entityName, RE.REPLACE_ALL ); } catch( RESyntaxException ex ) { ERROR( ex ); throw new GenericSystemException( "Cannot replace '" + ENTITY_VAR + "' variable", ex ); } } // // Substitute $dbobject variable // private String makeDbObjectVariableSubstitution( String dbObject, String s ) { try { return new RE( DBOBJECT_VAR ).subst( s, dbObject, RE.REPLACE_ALL ); } catch( RESyntaxException ex ) { ERROR( ex ); throw new GenericSystemException( "Cannot replace '" + DBOBJECT_VAR + "' variable", ex ); } } /** * Get Entity value object by the name * @param entityName entity name * @return Entity object */ private Entity getEntityViewConfig( String entityName ) { Object o = entityTable.get( entityName ); if( o == null ) { throw new UnknownEntityException( entityName ); } return( Entity ) o; } /** * Get EntityViewConfigManager EJB reference * @return EntityViewConfigManager remote interface */ private EntityViewConfigManager getEntityViewConfigManager() { return( EntityViewConfigManager ) getContext().getCOM().getRemoteObject( JNDINames.EntityViewConfigManagerRemote, EntityViewConfigManagerHome.class ); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?