~~Title: Java Style~~
All of our Java classes use a standardized style. In addition, we use [[https://checkstyle.sourceforge.net/|Checkstyle]] and the [[https://eclipse-cs.sourceforge.net/|Checkstyle Eclipse Plugin]], with predefined rules to avoid wasting time during development.
The Checkstyle rules are saved in the **JVx Repository** under the following file name:
/trunk/java/library/checkstyle_opensource.xml
==== Classes ====
We use the following style for classes:
/*
* Copyright 2018 SIB Visions GmbH
*
* Licensed 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 KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
*
* History
*
* dd.MM.yyyy - [XX] - creation
*/
package com.sibvisions.foo;
/**
* I do that and that ....
*
* @author First Last
*/
public class Bar
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class members
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/** The foo type. */
public static final int TYPE_FOO = 1;
/** The value of foo bar. */
private Object oValue;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Initialization
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* Creates a new instance of Bar
.
*/
public Bar()
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Abstract methods implementation
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Interface implementation
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Abstract methods
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Overwritten methods
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* {@inheritDoc}
*/
@Override
public String toString()
{
return "Foo";
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// User-defined methods
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* Sets the value.
*
* @param pValue the value.
*/
public void setValue(Object pValue)
{
this.oValue = pValue;
}
/**
* Gets the value.
*
* @return the value.
*/
public Object getValue()
{
return oValue;
}
//****************************************************************
// Subclass definition
//****************************************************************
} // Bar
The following rules are defined by this template:
* Variable declaration at the beginning (first constants, then variables)
* Then constructors and initialization methods
* Then the implementation of abstract methods
* Then the implementation of interface methods
* Then the definition of abstract methods
* Then all overwritten methods (marked with @Override)
* Then all methods of the class
* Sub/Inner classes at the end \\ \\
* Each parameter of a method is marked using the prefix "p"
* A prefix is also used for instance variables, e.g.: \\
String sValue = "bar";
* Important changes are documented in the header, including time stamp and author
* Documentation for the class declaration, ALL methods and instance variables and constants
==== Interfaces ====
We use the following style for interfaces:
/*
* Copyright 2018 SIB Visions GmbH
*
* Licensed 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 KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
*
* History
*
* dd.MM.yyyy - [XX] - creation
*/
package com.sibvisions.foo;
/**
* I do that and that ....
*
* @author First Last
*/
public interface IBar
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Constants
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/** The foo type. */
public static final int TYPE_FOO = 1;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Method definitions
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* Sets the value.
*
* @param pValue value.
*/
public void setValue(Object pValue);
//****************************************************************
// Subinterface definition
//****************************************************************
} // IBar
The following rules are defined by this template:
* Constants are defined at the beginning
* Then interface methods
* Sub/Inner interfaces at the end \\ \\
* Each interface strats with "I"
* Important changes are documented in the header, including time stamp and author
* Documentation for the interface declaration, ALL methods and constants
==== Unit Tests ====
The use of unit tests ensures that basic functionality works as expected. A unit test can never test the entire functionality in all conceivable configurations, but without it the required quality standards cannot be met. We therefore require a working set of unit tests.
Unit tests are saved separately from the core source code:
/trunk/java/library/src/com/sibvisions/foo
/trunk/java/library/test/com/sibvisions/foo
[[https://www.junit.org/|JUnit]] is used as the testing framework.
We use the following style for unit tests:
/*
* Copyright 2018 SIB Visions GmbH
*
* Licensed 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 KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
*
* History
*
* dd.MM.yyyy - [XX] - creation
*/
package com.sibvisions.foo;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* Tests the functionality of ...
*
* @author First Last
*/
public class TestBar
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class members
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Initialization
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* Initializes the unit test.
*
* @throws Exception if initialization fails
*/
@BeforeClass
public static void beforeClass() throws Exception
{
}
/**
* Resets the unit test.
*
* @throws Exception if reset fails
*/
@AfterClass
public static void afterClass() throws Exception
{
}
/**
* Sets values before each test.
*
* @throws Exception if set values fails
*/
@Before
public void beforeTest() throws Exception
{
}
/**
* Reset values after each test.
*
* @throws Exception if reset values fails
*/
@After
public void afterTest() throws Exception
{
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Abstract methods implementation
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Interface implementation
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Overwritten methods
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// User-defined methods
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Test methods
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* Tests the ... method.
*/
@Test
public void testGet()
{
}
//****************************************************************
// Subclass definition
//****************************************************************
} // TestBar
The following rules are defined by this template:
* Variable declaration at the beginning (first constants, then variables)
* Then methods for the test initialization
* Then the implementation of abstract methods
* Then the implementation of interface methods
* Then all overwritten methods (marked with @Override)
* Then all methods of the class
* Then all test methods (marked with @Test)
* Sub/Inner classes at the end \\ \\
* Each test class starts with "Test"
* Each test method starts with "test"
* Important changes are documented in the header, including time stamp and author
* Documentation for the class declaration, ALL methods and instance variables and constants