Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/test/EntityTestSuite.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -51,7 +51,7 @@ /* * This sets how many values to insert when trying to create a large number of values. 10,000 causes HSQL to crash but is ok * with Derby. Going up to 100,000 causes problems all around because Java List seems to be capped at about 65,000 values. - * + * * NOTE: setting this lower so that the general tests don't take so long to run; to really push it can increase this number. */ public static final long TEST_COUNT = 1000; @@ -65,7 +65,7 @@ protected void setUp() throws Exception { this.delegator = GenericDelegator.getGenericDelegator(DELEGATOR_NAME); } - + /* * Tests storing values with the delegator's .create, .makeValue, and .storeAll methods */ @@ -381,7 +381,7 @@ return; } finally { List<GenericValue> newlyCreatedValues = delegator.findList("Testing", null, null, UtilMisc.toList("testingId"), null, false); - delegator.removeAll(newlyCreatedValues); + delegator.removeAll(newlyCreatedValues); } } @@ -445,7 +445,7 @@ } /* - * This test will verify that a transaction which takes longer than the pre-set timeout are rolled back. + * This test will verify that a transaction which takes longer than the pre-set timeout are rolled back. */ public void testTransactionUtilMoreThanTimeout() throws Exception { try { @@ -464,7 +464,7 @@ delegator.removeByAnd("Testing", "testingId", "timeout-test"); } } - + /* * This test will verify that the same transaction transaction which takes less time than timeout will be committed. */ @@ -503,7 +503,7 @@ } /* - * Tests setting a byte value into a blob data type using the GenericValue .setBytes method + * Tests setting a byte value into a blob data type using the GenericValue .setBytes method */ public void testBlobCreate() throws Exception { try { @@ -512,7 +512,7 @@ GenericValue testingBlob = delegator.makeValue("TestBlob", "testBlobId", "byte-blob"); testingBlob.setBytes("testBlobField", b); testingBlob.create(); - + TestCase.assertTrue("Blob with byte value successfully created...", true); } catch (Exception ex) { TestCase.fail(ex.getMessage()); @@ -524,7 +524,7 @@ } /* - * This creates an string id from a number + * This creates an string id from a number */ private String getTestId(String strTestBase, int iNum) { StringBuilder strBufTemp = new StringBuilder(strTestBase); @@ -539,7 +539,7 @@ } if (iNum < 10) { strBufTemp.append("0"); - } + } strBufTemp.append(iNum); return strBufTemp.toString(); } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/DebugXaResource.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/DebugXaResource.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/DebugXaResource.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/DebugXaResource.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -31,7 +31,7 @@ public DebugXaResource(String info) { this.ex = new Exception(info); } - + public DebugXaResource() { this.ex = new Exception(); } @@ -54,5 +54,5 @@ public void log() { Debug.log("Xid : " + xid, module); Debug.log(ex, module); - } + } } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/DumbFactory.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/DumbFactory.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/DumbFactory.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/DumbFactory.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -42,9 +42,9 @@ * A dumb, non-working transaction manager. */ public class DumbFactory implements TransactionFactoryInterface { - + public static final String module = DumbFactory.class.getName(); - + public TransactionManager getTransactionManager() { return new TransactionManager() { public void begin() throws NotSupportedException, SystemException { @@ -101,11 +101,11 @@ } }; } - + public String getTxMgrName() { return "dumb"; } - + public Connection getConnection(String helperName) throws SQLException, GenericEntityException { DatasourceInfo datasourceInfo = EntityConfigUtil.getDatasourceInfo(helperName); @@ -117,6 +117,6 @@ return null; } } - - public void shutdown() {} + + public void shutdown() {} } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/GenericTransactionException.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/GenericTransactionException.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/GenericTransactionException.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/GenericTransactionException.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/GenericXaResource.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/GenericXaResource.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/GenericXaResource.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/GenericXaResource.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -93,7 +93,7 @@ this.setName("GenericXaResource-Thread"); this.setDaemon(true); this.active = true; - this.xid = xid; + this.xid = xid; this.start(); } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/JNDIFactory.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/JNDIFactory.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/JNDIFactory.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/JNDIFactory.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -47,7 +47,7 @@ * Central source for Tyrex JTA objects from JNDI */ public class JNDIFactory implements TransactionFactoryInterface { - + // Debug module name public static final String module = JNDIFactory.class.getName(); @@ -128,11 +128,11 @@ } return userTransaction; } - + public String getTxMgrName() { return "jndi"; } - + public Connection getConnection(String helperName) throws SQLException, GenericEntityException { DatasourceInfo datasourceInfo = EntityConfigUtil.getDatasourceInfo(helperName); @@ -145,7 +145,7 @@ } else { // Debug.logError("JNDI loaded is the configured transaction manager but no jndi-jdbc element was specified in the " + helperName + " datasource. Please check your configuration.", module); } - + if (datasourceInfo.inlineJdbcElement != null) { Connection otherCon = ConnectionFactory.getManagedConnection(helperName, datasourceInfo.inlineJdbcElement); return TransactionFactory.getCursorConnection(helperName, otherCon); @@ -154,7 +154,7 @@ return null; } } - + public static Connection getJndiConnection(String jndiName, String jndiServerName) throws SQLException, GenericEntityException { // if (Debug.verboseOn()) Debug.logVerbose("Trying JNDI name " + jndiName, module); DataSource ds; @@ -241,6 +241,6 @@ } return null; } - + public void shutdown() {} } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactory.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactory.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactory.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactory.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactoryInterface.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactoryInterface.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactoryInterface.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionFactoryInterface.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -31,10 +31,10 @@ public TransactionManager getTransactionManager(); public UserTransaction getUserTransaction(); - + public String getTxMgrName(); - + public Connection getConnection(String helperName) throws SQLException, GenericEntityException; - + public void shutdown(); } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionUtil.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionUtil.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TransactionUtil.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -162,7 +162,7 @@ return STATUS_NO_TRANSACTION; } } - + public static String getStatusString() throws GenericTransactionException { return getTransactionStateString(getStatus()); } @@ -216,7 +216,7 @@ clearTransactionStamps(); clearTransactionBeginStack(); clearSetRollbackOnlyCause(); - + Debug.logError(e, "Rollback Only was set when trying to commit transaction here; throwing rollbackOnly cause exception", module); throw new GenericTransactionException("Roll back error, could not commit transaction, was rolled back instead because of: " + rollbackOnlyCause.getCauseMessage(), rollbackOnlyCause.getCauseThrowable()); } else { @@ -246,7 +246,7 @@ Debug.logWarning("WARNING: called rollback without debug/error info; it is recommended to always pass this to make otherwise tricky bugs much easier to track down.", module); rollback(beganTransaction, null, null); } - + /** Rolls back transaction in the current thread IF transactions are available * AND if beganTransaction is true; if beganTransaction is not true, * setRollbackOnly is called to insure that the transaction will be rolled back @@ -316,7 +316,7 @@ } } else { Debug.logWarning("[TransactionUtil.setRollbackOnly] transaction rollback only not set, status is STATUS_NO_TRANSACTION", module); - } + } } catch (IllegalStateException e) { Throwable t = e.getCause() == null ? e : e.getCause(); throw new GenericTransactionException("Could not set rollback only on transaction, IllegalStateException exception: " + t.toString(), t); @@ -436,7 +436,7 @@ * STATUS_PREPARED 2 * STATUS_COMMITTED 3 * STATUS_ROLLEDBACK 4 - * STATUS_UNKNOWN 5 + * STATUS_UNKNOWN 5 * STATUS_NO_TRANSACTION 6 * STATUS_PREPARING 7 * STATUS_COMMITTING 8 @@ -563,7 +563,7 @@ transactionBeginStackSave.set(el); } el.add(0, e); - + Long curThreadId = Thread.currentThread().getId(); List<Exception> ctEl = allThreadsTransactionBeginStackSave.get(curThreadId); if (ctEl == null) { @@ -579,7 +579,7 @@ if (UtilValidate.isNotEmpty(ctEl)) { ctEl.remove(0); } - + // then do the more reliable ThreadLocal one List<Exception> el = transactionBeginStackSave.get(); if (UtilValidate.isNotEmpty(el)) { @@ -612,14 +612,14 @@ if (!Debug.infoOn()) { return; } - + for (Map.Entry<Long, Exception> attbsMapEntry : allThreadsTransactionBeginStack.entrySet()) { Long curThreadId = (Long) attbsMapEntry.getKey(); Exception transactionBeginStack = attbsMapEntry.getValue(); List<Exception> txBeginStackList = allThreadsTransactionBeginStackSave.get(curThreadId); - + Debug.logInfo(transactionBeginStack, "===================================================\n===================================================\n Current tx begin stack for thread [" + curThreadId + "]:", module); - + if (UtilValidate.isNotEmpty(txBeginStackList)) { int stackLevel = 0; for (Exception stack : txBeginStackList) { @@ -631,7 +631,7 @@ } } } - + private static void setTransactionBeginStack() { Exception e = new Exception("Tx Stack Placeholder"); setTransactionBeginStack(e); @@ -650,7 +650,7 @@ private static Exception clearTransactionBeginStack() { Long curThreadId = Thread.currentThread().getId(); allThreadsTransactionBeginStack.remove(curThreadId); - + Exception e = transactionBeginStack.get(); if (e == null) { Exception e2 = new Exception("Current Stack Trace"); @@ -685,7 +685,7 @@ public void logError(String message) { Debug.logError(this.getCauseThrowable(), (message == null ? "" : message) + this.getCauseMessage(), module); } public boolean isEmpty() { return (UtilValidate.isEmpty(this.getCauseMessage()) && this.getCauseThrowable() == null); } } - + private static void pushSetRollbackOnlyCauseSave(RollbackOnlyCause e) { List<RollbackOnlyCause> el = setRollbackOnlyCauseSave.get(); if (el == null) { @@ -742,7 +742,7 @@ // ======================================= // SUSPENDED TRANSACTIONS START TIMESTAMPS // ======================================= - + /** * Maintain the suspended transactions together with their timestamps */ @@ -751,7 +751,7 @@ return UtilGenerics.checkMap(new ListOrderedMap()); } }; - + /** * Put the stamp to remember later * @param t transaction just suspended Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TyrexFactory.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TyrexFactory.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TyrexFactory.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/transaction/TyrexFactory.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -39,7 +39,7 @@ } /* public class TyrexFactory implements TransactionFactoryInterface { - + public static final String module = TyrexFactory.class.getName(); protected static TransactionDomain td = null; @@ -52,7 +52,7 @@ if (td == null) { // probably because there was no tyrexdomain.xml file, try another method: - // For Tyrex version 0.9.8.5 + // For Tyrex version 0.9.8.5 try { String resourceName = "tyrexdomain.xml"; URL url = UtilURL.fromResource(resourceName); @@ -85,9 +85,9 @@ Debug.logError("Could not get Tyrex TransactionDomain for domain " + DOMAIN_NAME, module); } - // For Tyrex version 0.9.7.0 + // For Tyrex version 0.9.7.0 tyrex.resource.ResourceLimits rls = new tyrex.resource.ResourceLimits(); - td = new TransactionDomain("ofbiztx", rls); + td = new TransactionDomain("ofbiztx", rls); } public static Resources getResources() { @@ -131,11 +131,11 @@ return null; } } - + public String getTxMgrName() { return "tyrex"; } - + public Connection getConnection(String helperName) throws SQLException, GenericEntityException { EntityConfigUtil.DatasourceInfo datasourceInfo = EntityConfigUtil.getDatasourceInfo(helperName); @@ -147,7 +147,7 @@ } catch (Exception ex) { Debug.logError(ex, "Tyrex is the configured transaction manager but there was an error getting a database Connection through Tyrex for the " + helperName + " datasource. Please check your configuration, class path, etc.", module); } - + Connection otherCon = ConnectionFactory.tryGenericConnectionSources(helperName, datasourceInfo.inlineJdbcElement); return otherCon; } else if (datasourceInfo.tyrexDataSourceElement != null) { @@ -164,7 +164,7 @@ } else { Connection con = tyrexDataSource.getConnection(); - if (con != null) { + if (con != null) { return con; } } @@ -176,13 +176,13 @@ return null; } } - + public void shutdown() { TyrexConnectionFactory.closeAll(); if (td != null) { td.terminate(); td = null; - } + } } } */ Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/ByteWrapper.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/ByteWrapper.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/ByteWrapper.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/ByteWrapper.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -22,9 +22,9 @@ /** * @deprecated - * NOTE DEJ20071022: deprecating this because we want to save the byte[] directly instead of inside a serialized + * NOTE DEJ20071022: deprecating this because we want to save the byte[] directly instead of inside a serialized * object, which makes it hard for other apps to use the data, and causes problems if this object is ever updated - * + * * A very simple class to wrap a byte array for persistence. */ public class ByteWrapper implements Serializable { Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/CachedClassLoaderInit.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/CachedClassLoaderInit.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/CachedClassLoaderInit.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/CachedClassLoaderInit.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/DistributedCacheClear.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/DistributedCacheClear.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/DistributedCacheClear.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/DistributedCacheClear.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -38,6 +38,6 @@ public void distributedClearCacheLineByCondition(String entityName, EntityCondition condition); public void distributedClearCacheLine(GenericPK primaryKey); - + public void clearAllCaches(); } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityCrypto.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityCrypto.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityCrypto.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityCrypto.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -86,7 +86,7 @@ try { SecretKey decryptKey = this.getKey(keyName, false); byte[] decryptedBytes = DesCrypt.decrypt(decryptKey, encryptedBytes); - + decryptedObj = UtilObject.getObject(decryptedBytes); } catch (GeneralException e) { try { @@ -101,7 +101,7 @@ throw new EntityCryptoException(e); } } - + // NOTE: this is definitely for debugging purposes only, do not uncomment in production server for security reasons: Debug.logInfo("Decrypted value [" + encryptedString + "] to result: " + decryptedObj, module); return decryptedObj; } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityDataAssert.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityDataAssert.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityDataAssert.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityDataAssert.java Sat Mar 21 23:22:45 2009 @@ -67,17 +67,17 @@ return rowsChecked; } - + public static void checkValueList(List valueList, GenericDelegator delegator, List<Object> errorMessages) throws GenericEntityException { if (valueList == null) return; - + Iterator valueIter = valueList.iterator(); while (valueIter.hasNext()) { GenericValue checkValue = (GenericValue) valueIter.next(); checkSingleValue(checkValue, delegator, errorMessages); } } - + public static void checkSingleValue(GenericValue checkValue, GenericDelegator delegator, List<Object> errorMessages) throws GenericEntityException { if (checkValue == null) { errorMessages.add("Got a value to check was null"); @@ -85,7 +85,7 @@ } // to check get the PK, find by that, compare all fields GenericPK checkPK = null; - + try { checkPK = checkValue.getPrimaryKey(); GenericValue currentValue = delegator.findOne(checkPK.getEntityName(), checkPK, false); @@ -101,12 +101,12 @@ ModelEntity.STAMP_FIELD.equals(nonpkFieldName) || ModelEntity.STAMP_TX_FIELD.equals(nonpkFieldName)) { continue; } - + Object checkField = checkValue.get(nonpkFieldName); Object currentField = currentValue.get(nonpkFieldName); if (checkField != null && !checkField.equals(currentField)) { - errorMessages.add("Field [" + modelEntity.getEntityName() + "." + nonpkFieldName + + errorMessages.add("Field [" + modelEntity.getEntityName() + "." + nonpkFieldName + "] did not match; file value [" + checkField + "], db value [" + currentField + "] pk [" + checkPK + "]"); } } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityDataLoader.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityDataLoader.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityDataLoader.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityDataLoader.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -87,7 +87,7 @@ public static List<URL> getUrlList(String helperName, String componentName, List readerNames) { String paths = getPathsString(helperName); List<URL> urlList = new LinkedList<URL>(); - + // first get files from resources if (readerNames != null) { for (Object readerInfo: readerNames) { @@ -107,7 +107,7 @@ Debug.logInfo("Could not find entity-data-reader named: " + readerName + ". Creating a new reader with this name. ", module); entityDataReaderInfo = new EntityDataReaderInfo(readerName); } - + if (entityDataReaderInfo != null) { for (Element resourceElement: entityDataReaderInfo.resourceElements) { ResourceHandler handler = new MainResourceHandler(EntityConfigUtil.ENTITY_ENGINE_XML_FILENAME, resourceElement); @@ -118,7 +118,7 @@ Debug.logWarning(errorMsg, module); } } - + // get all of the component resource model stuff, ie specified in each ofbiz-component.xml file for (ComponentConfig.EntityResourceInfo componentResourceInfo: ComponentConfig.getAllEntityResourceInfos("data", componentName)) { if (readerName.equals(componentResourceInfo.readerName)) { @@ -140,7 +140,7 @@ String errorMsg = "Could not find datasource named: " + helperName; Debug.logWarning(errorMsg, module); } - + // get files from the paths string if (paths != null && paths.length() > 0) { StringTokenizer tokenizer = new StringTokenizer(paths, ";"); @@ -188,7 +188,7 @@ public static int loadData(URL dataUrl, String helperName, GenericDelegator delegator, List<Object> errorMessages, int txTimeout, boolean dummyFks, boolean maintainTxs, boolean tryInsert) throws GenericEntityException { int rowsChanged = 0; - + if (dataUrl == null) { String errMsg = "Cannot load data, dataUrl was null"; errorMessages.add(errMsg); @@ -254,7 +254,7 @@ toStore.add(delegator.makeValue("SecurityPermission", "permissionId", baseName + "_CREATE", "description", "Permission to Create a " + entity.getEntityName() + " entity.")); toStore.add(delegator.makeValue("SecurityPermission", "permissionId", baseName + "_UPDATE", "description", "Permission to Update a " + entity.getEntityName() + " entity.")); toStore.add(delegator.makeValue("SecurityPermission", "permissionId", baseName + "_DELETE", "description", "Permission to Delete a " + entity.getEntityName() + " entity.")); - + toStore.add(delegator.makeValue("SecurityGroupPermission", "groupId", "FLEXADMIN", "permissionId", baseName + "_VIEW")); toStore.add(delegator.makeValue("SecurityGroupPermission", "groupId", "FLEXADMIN", "permissionId", baseName + "_CREATE")); toStore.add(delegator.makeValue("SecurityGroupPermission", "groupId", "FLEXADMIN", "permissionId", baseName + "_UPDATE")); Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityFindOptions.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityFindOptions.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityFindOptions.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityFindOptions.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityListIterator.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityListIterator.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityListIterator.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityListIterator.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -47,7 +47,7 @@ /** Module Name Used for debugging */ public static final String module = EntityListIterator.class.getName(); - + protected SQLProcessor sqlp; protected ResultSet resultSet; protected ModelEntity modelEntity; @@ -58,7 +58,7 @@ protected GenericDelegator delegator = null; private boolean haveShowHasNextWarning = false; - + public EntityListIterator(SQLProcessor sqlp, ModelEntity modelEntity, List<ModelField> selectFields, ModelFieldTypeReader modelFieldTypeReader) { this.sqlp = sqlp; this.resultSet = sqlp.getResultSet(); @@ -68,8 +68,8 @@ } public EntityListIterator(ResultSet resultSet, ModelEntity modelEntity, List<ModelField> selectFields, ModelFieldTypeReader modelFieldTypeReader) { - this.sqlp = null; - this.resultSet = resultSet; + this.sqlp = null; + this.resultSet = resultSet; this.modelEntity = modelEntity; this.selectFields = selectFields; this.modelFieldTypeReader = modelFieldTypeReader; @@ -148,7 +148,7 @@ closed = true; } else { throw new GenericEntityException("Cannot close an EntityListIterator without a SQLProcessor or a ResultSet"); - } + } } } @@ -224,23 +224,23 @@ } } - /** + /** * PLEASE NOTE: Because of the nature of the JDBC ResultSet interface this method can be very inefficient; it is much better to just use next() until it returns null * For example, you could use the following to iterate through the results in an EntityListIterator: - * + * * GenericValue nextValue = null; * while ((nextValue = (GenericValue) this.next()) != null) { ... } - * + * */ public boolean hasNext() { if (!haveShowHasNextWarning) { // DEJ20050207 To further discourage use of this, and to find existing use, always log a big warning showing where it is used: Exception whereAreWe = new Exception(); Debug.logWarning(whereAreWe, "WARNING: For performance reasons do not use the EntityListIterator.hasNext() method, just call next() until it returns null; see JavaDoc comments in the EntityListIterator class for details and an example", module); - + haveShowHasNextWarning = true; } - + try { if (resultSet.isLast() || resultSet.isAfterLast()) { return false; @@ -295,10 +295,10 @@ /** Moves the cursor to the next position and returns the GenericValue object for that position; if there is no next, returns null * For example, you could use the following to iterate through the results in an EntityListIterator: - * + * * GenericValue nextValue = null; * while ((nextValue = (GenericValue) this.next()) != null) { ... } - * + * */ public GenericValue next() { try { @@ -443,7 +443,7 @@ try { if (number == 0) return FastList.newInstance(); List<GenericValue> list = FastList.newInstance(); - + // just in case the caller missed the 1 based thingy if (start == 0) start = 1; @@ -488,7 +488,7 @@ throw new GenericEntityException(e.getNonNestedMessage(), e.getNested()); } } - + public int getResultsSizeAfterPartialList() throws GenericEntityException { if (this.last()) { return this.currentIndex(); Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntitySaxReader.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntitySaxReader.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntitySaxReader.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntitySaxReader.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -173,14 +173,14 @@ public boolean getDisableEeca() { return this.disableEeca; } - + public List<Object> getMessageList() { if (this.checkDataOnly && this.messageList == null) { messageList = FastList.newInstance(); } return this.messageList; } - + public void setMessageList(List<Object> messageList) { this.messageList = messageList; } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityTypeUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityTypeUtil.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityTypeUtil.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityTypeUtil.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -32,7 +32,7 @@ * extensibility pattern and that can be of various types as identified in the database. */ public class EntityTypeUtil { - + public static final String module = EntityTypeUtil.class.getName(); public static boolean isType(Collection<GenericValue> thisCollection, String typeRelation, GenericValue targetType) { Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityUtil.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityUtil.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/EntityUtil.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -455,7 +455,7 @@ entity.store(); } } - + public static <T> List<T> getFieldListFromEntityList(List<GenericValue> genericValueList, String fieldName, boolean distinct) { if (genericValueList == null || fieldName == null) { return null; @@ -465,7 +465,7 @@ if (distinct) { distinctSet = FastSet.newInstance(); } - + for (GenericValue value: genericValueList) { T fieldValue = UtilGenerics.<T>cast(value.get(fieldName)); if (fieldValue != null) { @@ -479,10 +479,10 @@ } } } - + return fieldList; } - + public static <T> List<T> getFieldListFromEntityListIterator(EntityListIterator genericValueEli, String fieldName, boolean distinct) { if (genericValueEli == null || fieldName == null) { return null; @@ -492,7 +492,7 @@ if (distinct) { distinctSet = FastSet.newInstance(); } - + GenericValue value = null; while ((value = genericValueEli.next()) != null) { T fieldValue = UtilGenerics.<T>cast(value.get(fieldName)); @@ -507,7 +507,7 @@ } } } - + return fieldList; } } Modified: ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java?rev=757065&r1=757064&r2=757065&view=diff ============================================================================== --- ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java (original) +++ ofbiz/trunk/framework/entity/src/org/ofbiz/entity/util/SequenceUtil.java Sat Mar 21 23:22:45 2009 @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -79,17 +79,17 @@ SequenceBank bank = this.getBank(seqName, seqModelEntity); return bank.getNextSeqId(staggerMax); } - + public void forceBankRefresh(String seqName, long staggerMax) { // don't use the get method because we don't want to create if it fails SequenceBank bank = sequences.get(seqName); if (bank == null) { return; } - + bank.refresh(staggerMax); } - + private SequenceBank getBank(String seqName, ModelEntity seqModelEntity) { SequenceBank bank = sequences.get(seqName); @@ -102,7 +102,7 @@ } } } - + return bank; } @@ -135,7 +135,7 @@ stagger = Math.round(Math.random() * staggerMax); if (stagger == 0) stagger = 1; } - + if ((curSeqId + stagger) <= maxSeqId) { Long retSeqId = Long.valueOf(curSeqId); curSeqId += stagger; @@ -152,7 +152,7 @@ } } } - + public void refresh(long staggerMax) { this.curSeqId = this.maxSeqId; this.fillBank(staggerMax, this.seqModelEntity); @@ -163,7 +163,7 @@ // no need to get a new bank, SeqIds available if ((curSeqId + stagger) <= maxSeqId) return; - + long bankSize = defaultBankSize; if (seqModelEntity != null && seqModelEntity.getSequenceBankSize() != null) { bankSize = seqModelEntity.getSequenceBankSize().longValue(); @@ -172,9 +172,9 @@ // NOTE: could use staggerMax for this, but if that is done it would be easier to guess a valid next id without a brute force attack bankSize = stagger * defaultBankSize; } - + if (bankSize > maxBankSize) bankSize = maxBankSize; - + long val1 = 0; long val2 = 0; @@ -184,24 +184,24 @@ while (val1 + bankSize != val2) { if (Debug.verboseOn()) Debug.logVerbose("[SequenceUtil.SequenceBank.fillBank] Trying to get a bank of sequenced ids for " + this.seqName + "; start of loop val1=" + val1 + ", val2=" + val2 + ", bankSize=" + bankSize, module); - - // not sure if this synchronized block is totally necessary, the method is synchronized but it does do a wait/sleep - //outside of this block, and this is the really sensitive block, so making sure it is isolated; there is some overhead + + // not sure if this synchronized block is totally necessary, the method is synchronized but it does do a wait/sleep + //outside of this block, and this is the really sensitive block, so making sure it is isolated; there is some overhead //to this, but very bad things can happen if we try to do too many of these at once for a single sequencer synchronized (this) { Transaction suspendedTransaction = null; try { //if we can suspend the transaction, we'll try to do this in a local manual transaction suspendedTransaction = TransactionUtil.suspend(); - + boolean beganTransaction = false; try { beganTransaction = TransactionUtil.begin(); - + Connection connection = null; Statement stmt = null; ResultSet rs = null; - + try { connection = ConnectionFactory.getConnection(parentUtil.helperName); } catch (SQLException sqle) { @@ -211,18 +211,18 @@ Debug.logWarning("[SequenceUtil.SequenceBank.fillBank]: Unable to esablish a connection with the database... Error was: " + e.toString(), module); throw e; } - + if (connection == null) { throw new GenericEntityException("[SequenceUtil.SequenceBank.fillBank]: Unable to esablish a connection with the database, connection was null..."); } - + String sql = null; - + try { // we shouldn't need this, and some TX managers complain about it, so not including it: connection.setAutoCommit(false); - + stmt = connection.createStatement(); - + sql = "SELECT " + parentUtil.idColName + " FROM " + parentUtil.tableName + " WHERE " + parentUtil.nameColName + "='" + this.seqName + "'"; rs = stmt.executeQuery(sql); boolean gotVal1 = false; @@ -231,7 +231,7 @@ gotVal1 = true; } rs.close(); - + if (!gotVal1) { Debug.logWarning("[SequenceUtil.SequenceBank.fillBank] first select failed: will try to add new row, result set was empty for sequence [" + seqName + "] \nUsed SQL: " + sql + " \n Thread Name is: " + Thread.currentThread().getName() + ":" + Thread.currentThread().toString(), module); sql = "INSERT INTO " + parentUtil.tableName + " (" + parentUtil.nameColName + ", " + parentUtil.idColName + ") VALUES ('" + this.seqName + "', " + startSeqId + ")"; @@ -240,12 +240,12 @@ } continue; } - + sql = "UPDATE " + parentUtil.tableName + " SET " + parentUtil.idColName + "=" + parentUtil.idColName + "+" + bankSize + " WHERE " + parentUtil.nameColName + "='" + this.seqName + "'"; if (stmt.executeUpdate(sql) <= 0) { throw new GenericEntityException("[SequenceUtil.SequenceBank.fillBank] update failed, no rows changes for seqName: " + seqName); } - + sql = "SELECT " + parentUtil.idColName + " FROM " + parentUtil.tableName + " WHERE " + parentUtil.nameColName + "='" + this.seqName + "'"; rs = stmt.executeQuery(sql); boolean gotVal2 = false; @@ -253,15 +253,15 @@ val2 = rs.getLong(parentUtil.idColName); gotVal2 = true; } - + rs.close(); - + if (!gotVal2) { throw new GenericEntityException("[SequenceUtil.SequenceBank.fillBank] second select failed: aborting, result set was empty for sequence: " + seqName); } - - // got val1 and val2 at this point, if we don't have the right difference between them, force a rollback (with - //setRollbackOnly and NOT with an exception because we don't want to break from the loop, just err out and + + // got val1 and val2 at this point, if we don't have the right difference between them, force a rollback (with + //setRollbackOnly and NOT with an exception because we don't want to break from the loop, just err out and //continue), then flow out to allow the wait and loop thing to happen if (val1 + bankSize != val2) { TransactionUtil.setRollbackOnly("Forcing transaction rollback in sequence increment because we didn't get a clean update, ie a conflict was found, so not saving the results", null); @@ -289,7 +289,7 @@ } catch (GenericTransactionException gte2) { Debug.logError(gte2, "Unable to rollback transaction", module); } - + // error, break out of the loop to not try to continue forever break; } finally { @@ -311,14 +311,14 @@ } } } - + if (val1 + bankSize != val2) { if (numTries >= maxTries) { String errMsg = "[SequenceUtil.SequenceBank.fillBank] maxTries (" + maxTries + ") reached for seqName [" + this.seqName + "], giving up."; Debug.logError(errMsg, module); return; } - + // collision happened, wait a bounded random amount of time then continue int waitTime = (new Double(Math.random() * (maxWaitMillis - minWaitMillis))).intValue() + minWaitMillis; |
Free forum by Nabble | Edit this page |