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 + -
显示快捷键?