blob: df89b18280c628da52bf2a22cfbef242509bee17 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.tools.refactoring;
// no blank line here - first specify Java imports:
import java.lang.reflect.*;
// blank line - next specify all the TopLink imports:
import org.eclipse.persistence.sessions.*;
import org.eclipse.persistence.exceptions.*;
// another blank line
/**
* <p><b>Purpose</b>: Describe the purpose of the Class.
* <p><b>Responsibilities</b>:<ul>
* <li> class responsibility
* <li> class responsibility
* </ul>
*
* @author ABC
* @since TOPLink/Java 1.0
*/
// yet another blank line
public class CodingStandard {
// still another blank line
/** Put one line comment describing the following variable */
protected String giveDescriptiveNameToVariables;
/** Put one line comment describing the following variable */
protected String useTabsToIndentVariables;
/** Put one line comment describing the following variable */
protected String useSingleLineSpacingBetweenVariables;
/** Put one line comment describing the following variable */
protected String commentShouldBeJustBeforeVariable;
/** Put one line comment describing the following variable */
protected String useSpacingAfterAndBeforeClassOpenAndCloseBrackets;
/** Put one line comment describing the following variable */
protected String allVariablesAreProtected;
protected String commentOnlyImportantVariables;
// final blank line
/**
* First of all, we should not access variables directly in the methods.
* But if we do then always use this.attributeName notation.
*/
public void accessingClassAttributes()
{
}
/**
* A blank line should always be used in the following circumstances:
* - between logical sections inside a method - to improve readability
* - between the method comment and the method declaration
*/
public void blankLines()
{
}
/**
* Blank spaces should always be used in the following circumstances:
* - A keyword followed by a parenthesis should be separated by a space:
* while (true) {
* ...
* }
*
* - Note that a blank should not be used between a method name and its opening
* parenthesis. This helps to distinguish keywords from method calls.
*
* - Blanks should appear after commas in argument lists.
*
* - All binary operators should be separated from their operands by spaces.
*
* - The expressions in a "for" statement should be separated by blanks.
* for (expr1; expr2; expr3)
*
* - Casts should be followed by a blank.
* (void) method((byte) aNum, (Object) x);
*
*/
public void blankSpaces()
{
}
/**
* A boolean variable should always be prefixed with conjunctions like is, has, does, should, etc.
* Examples: isNullAllowed, shouldMaintainCache, doesObjectExist, hasTables
*
* The get accessor for such variables should be the name of the variable itself and the set accessor
* is the usual one
* Example isNullAllowed(), setIsNullAllowed(boolean value)
*
* With each boolean variable we should also provide two modifiers.
* Example
* allowNull()
* {
* setIsNullAllowed(true);
* }
*
* dontAllowNull()
* {
* setIsNullAllowed(true);
* }
*/
public void booleanVariable()
{
}
/**
* It's a good idea to declare all the varibles at the beginning of a code block as
* variables defined in the middle of the block can be confusing.
*/
public void declarationsInTheMethod(Session firstArgument, String secondArgument)
{ /* Place the starting bracket on a new line */
/* One declaration per line is recommended since it encourages commenting */
int level, // indentation level
size; // size of table
/* New declaration should start on new line */
float foo,
bar;
/* Give one line space before coding method body */
methodBody();
}
/**
* Never break for-statements into multiple lines.
* Break down the components of the for-statement into multiple lines if necessary.
*/
public void forStatements()
{
/* WRONG
* The following loop puts too much information on the same line:
*
* for (Enumeration mappings = getQuery().getDescriptor().getMappings().elements(); mappings.hasMoreElements(); ) {
* some statements;
* }
*
*/
/* RIGHT
*
* Vector mappings = getQuery().getDescriptor().getMappings();
* for (Enumeration mappingsEnum = mappings.elements(); mappingsEnum.hasMoreElements(); ) {
* some statements;
* }
*
*/
}
/**
* Always use the braces {}. This makes the statement more clear and prevents
* some sloppy bugs (i.e if you add a second line).
* WRONG:
* if (condition)
* doStuff();
* else
* doOtherStuff();
*/
public void ifElseStatements()
{
boolean condition = true;
if (condition) {
//statements
}
if (condition) {
//statements
} else {
//statements
}
if (condition) {
//statements
} else if (condition) {
//statements
} else {
//statements
}
}
/**
* Avoid long statements. Maintainence is a nightmare.
*/
public void longStatements()
{
/*
* WRONG:
* setTableDefinition(getTableDefinitionNamed(((DatabaseTable)getMapping().getDescriptor().getTables().firstElement()).getName()));
*
* RIGHT:
* The right approach to this statement would be to break it up into smaller statements. This would mean few more
* lines and local variables, but will be easy to understand
*
* DatabaseTable table = (DatabaseTable)getMapping().getDescriptor().getTables().firstElement();
* String tableName = table.getName();
* TableDefinition tableDefinition = getTableDefinitionNamed(tableName);
* setTableDefinition(tableDefinition);
*/
}
/**
* NOTE:
* A compound statement is a statement that contains several other statements enclosed in braces "{}".
* The enclosed statements should be indented one more level than the compound statement.
*
* The opening left brace should be at the end of the line beginning the compound statement,
* and the closing right brace should begin a line and be indented to match the beginning of the
* compound statement.
*
* Braces are used around all statements, even single statements, when they are part of a control
* structure, such as an "if-else" or "for" statement. This makes it easier to add or delete
* statements without accidentally introducing bugs due to forgetting to add braces.
*/
public void methodBody()
{
longStatements();
ifElseStatements();
forStatements();
whileStatements();
tryCatchStatements();
}
/**
* INTERNAL:
* Give a full description of the user callable method. Make sure it is javadoc compatible.
* - blank line -
* @param argument1 This is optional, give full description only if neccessary.
* @exception InvocationTargetException This is optional, give full description only if neccessary.
* @return String This is optional, give full description only if neccessary.
*/
public String methodCommentsForNonAPI(String argument1, String argument2)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
{
String descriptiveVariable = "The variable should be descriptive enough to convey its meaning.";
return descriptiveVariable;
}
/**
* PUBLIC:
* Give a full description of the user callable method. Make sure it is javadoc compatible.
* - blank line -
* @param argument1 This is optional, give full description only if neccessary.
* @exception InvocationTargetException This is optional, give full description only if neccessary.
* @return String This is optional, give full description only if neccessary.
*/
public String methodCommentsForUserAPI(String argument1, String argument2)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
{
String descriptiveVariable = "The variable should be descriptive enough to convey its meaning.";
return descriptiveVariable;
}
/**
* method comments
*/
public void methodDeclarationIsLong(String argument1, String argument2)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
{
// do something
}
/**
* method Comments
*/
public void methodDeclarationIsReallyLong(
String argument1,
String argument2,
String argument3,
String ifYouHaveMoreArgumentsThenCheckYourMethod)
throws
IllegalAccessException,
IllegalArgumentException,
InvocationTargetException
{
// do something
}
/**
* Instead of prefixing the parameter "useTabsToIndentVariable" with an article (e.g. a, an, the)
* and then assigning to the class attribute we can do the following assignment.
*
* NOTE:
* Prefixing parameters in non accessor methods makes sense because we can differentiate between
* local variables and passed parameters.
*/
public void setAccessor(String useTabsToIndentVariable)
{
this.useTabsToIndentVariables = useTabsToIndentVariable;
}
/**
* TopLink exceptions are all runtime exceptions - so they do not have to be caught.
* If the method throws the exception then it must be declared in the "throws" clause.
* The one exception is if a runtime exception is caught for cleanup purposes,
* then it should not be re-thrown.
* A method that calls a method that throws a TopLink exception should not also throw it,
* the exception to this is database and optimistic lock exceptions which must always
* be thrown up to the user callable methods.
*/
public void toplinkExceptions () throws DatabaseException, QueryException
{
/*
Cursor cursor = prepareCuror();
try {
if (cursor.isEmpty()) {
throw new QueryException("This must not be empty because ...", getQuery());
}
doStuff(cursor);
} catch (RuntimeException exception) {
cursor.close();
throw exception;
}
*/
}
public void tryCatchStatements ()
{
/*
try {
statements;
} catch (Exception exception) {
statements;
}
*/
}
public void whileStatements ()
{
/*
* A while statement should have the following form:
* while (condition) {
* statement;
* }
*
* An empty while statment should have the following form:
* while (condition);
*/
}
}