/** * Crea un dominio clonado del dominio MODEL @param DomainId GUID del nuevo dominio (si "" entonces se calcula uno aleatorio entre 1670 y 524287 ) @param DomainNm nm_domain del nuevo dominio * Parametros respuesta //param sCodError codigo de error (0->ok, 1->ko) //param sIdObjetoOK id_domain del nuevo dominio si sCodError = 0 sino "" //param sMessage Mensaje de exito si sCodError = 0 o de error si sCodError = 1 //param sGuUserAdmin gu_user del administrador del dominio **/ import java.sql.SQLException; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.Properties; import java.lang.Math; import java.lang.Number; import com.knowgate.dataobjs.DB; import com.knowgate.dataobjs.DBAudit; import com.knowgate.dataobjs.DBBind; import com.knowgate.dataobjs.DBSubset; import com.knowgate.datacopy.DataStruct; import com.knowgate.acl.ACLDomain; import com.knowgate.misc.Environment; import com.knowgate.hipergate.datamodel.ModelManager; // Dominio Modelo a clonar (no cambiar) int MODEL = 1025; // Parametros del nuevo dominio //String NewDomainId = "1032" ; // NO PONER AQU� 1024 NI 1025 O TE CARGAS LOS DOMINIOS BUENOS //String NewDomainNm = "TEST5"; String NewDomainId = String.valueOf( DBBind.nextVal(AlternativeConnection, "seq_k_domains") ); String NewDomainNm = DomainNm; /* C�digo antiguo de generaci�n autom�tica double iRandValue = Math.random(); //valores tomados de k_sequences //int iMinValue = 1026; //ponemos un numero suficientemente grande para que no pise los dominios anteriores int iMinValue = 1670; int iMaxValue = 524287; //calculo del id_domain aleatorio entre iMinValue e iMaxValue double iNewDomainId = Math.round( iRandValue * (iMaxValue-iMinValue) ) + iMinValue ; //to do : hay que evitar colisiones //Valores por defecto si se recibe null if (0 == NewDomainId.length()) NewDomainId = String.valueOf( (int) iNewDomainId); //NewDomainId = "524288"; */ //valor de retorno ReturnValue = new Properties(); ReturnValue.put("sCodError", "0"); ReturnValue.put("sMessage", "Dominio (" + NewDomainId + "," + NewDomainNm + ") creado con exito."); ReturnValue.put("sIdObjetoOK", NewDomainId); Integer iSourceDomain = new Integer(MODEL); //Integer iTargetDomain = new Integer(NewDomainId); Integer iTargetDomain = new Integer(NewDomainId); Object[] oPKOr = { iSourceDomain }; Object[] oPKTr = { iTargetDomain }; String sStorage = Environment.getProfileVar("hipergate", "storage"); Properties oParams = new Properties(); oParams.put("DomainId", iTargetDomain.toString()); oParams.put("DomainNm", NewDomainNm); DataStruct oDS = new DataStruct(); //oDS.parse(sStorage + "/scripts/domain_clon.xml", oParams); oDS.parse(ModelManager.getResourceAsString("scripts/domain_clon.xml"), oParams); try { DefaultConnection.setReadOnly(true); DefaultConnection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED); // C�digo de acceso a datos oDS.setOriginConnection(DefaultConnection); oDS.setTargetConnection(AlternativeConnection); AlternativeConnection.setAutoCommit (false); oDS.insert(oPKOr, oPKTr, 1); // ***************************************************** // C�digo para asignar ls categor�as home a cada usuario PreparedStatement oStmt; DBSubset oCategories; int iCategories; int iUnderscore; String sCatName; String sNickName; // Leer todas las categor�as del nuevo dominio oCategories = new DBSubset(DB.k_categories, DB.gu_category + "," + DB.nm_category, DB.gu_owner + " IN (SELECT " + DB.gu_user + " FROM " + DB.k_users + " WHERE " + DB.id_domain + "=" + iTargetDomain.toString() + ") ", 4); iCategories = oCategories.load(AlternativeConnection); // Para cada categor�a buscar un usuario cuyo nick coincida con el final del nombre de la categoria // Es decir, el matching entre las categor�as creadas y los usuarios creados se hace usando el // convenio del campo nm_category de tener la forma DOMINIO_usuario_categoria oStmt = AlternativeConnection.prepareStatement("UPDATE " + DB.k_users + " SET " + DB.gu_category + "=? WHERE " + DB.id_domain + "=" + iTargetDomain.toString() + " AND " + DB.tx_nickname + "=?"); for (int c=0; c<iCategories; c++) { sCatName = oCategories.getString(1,c); iUnderscore = sCatName.indexOf("_"); if (iUnderscore>0) { sNickName = sCatName.substring(iUnderscore+1); oStmt.setString(1, oCategories.getString(0,c)); oStmt.setString(2, sNickName); oStmt.executeUpdate(); } // fi() } // next (c) oStmt.close(); // ***************************************************** //Calculo del usuario admin del nuevo dominio y pasarlo en ReturnValue //Necesario para la creaci�n de accounts DBSubset oDomains; int iDomains; oDomains = new DBSubset(DB.k_domains, DB.gu_owner , DB.id_domain + "=" + NewDomainId , 4); iUsers = oDomains.load(AlternativeConnection); String sGuUserAdmin = oDomains.getString(0,0); ReturnValue.put("sGuUserAdmin", sGuUserAdmin); DBAudit.log(AlternativeConnection, ACLDomain.ClassId, "NDOM", "unknown", "0", null, 0, 0, null, null); } catch (SQLException e) { //ReturnValue = "ERROR: " + e.getMessage(); ReturnValue.put("sCodError", "1"); ReturnValue.put("sMessage", "ERROR: " + e.getMessage()); ReturnValue.put("sIdObjetoOK", ""); }