This page is for Grouper developers.

Note the coding standards: Grouper developers coding standards

General tips

Map the webapp dir to tomcat, WS should start, try a call from the client

Eclipse setup

Project setup

TODO

Checkstyle plugin

Grouper uses Checkstyle configuration files to scan for general style issues in source code. These are in the grouper-parent/src/checkstyle project directory, and can be used to set up IDE background checking on Java files.

Go to Help→Eclipse Marketplace, and install "Checkstyle Plugin (eclipse-cs)". Click OK if needed to install unsigned content

Configure via File→ Properties→ Checkstyle→ Local Check Configurations


Click New... to create the local configuration. Choose Type "Project Relative Configuration". The location of the file will be under /grouper-parent/src/checkstyle. File checkstyle-legacy.xml just has a few checks and is geared toward older code with more issues, while checkstyle.xml has more checks and is better for newer files.


On the main tab, check "Checkstyle active for this project", choose the newly created configuration. To adjust the number of warnings, you can check more boxes under the "Exclude from checking" choices.



Sample output:

IntelliJ IDEA setup

Project setup

Projects -> Open

{GIT}/grouper/grouper-parent/pom.xml -> Open as Project

Wait a few minutes (6+) while it downloads dependencies and structures the subprojects

When it's finished, you should see a folder in bold for all the subprojects associated with the release

Checkstyle plugin

Install the plugin: File -> Settings -> Plugins -> CheckStyle IDEA

Restart the IDE as directed

File -> Settings -> Tools -> Checkstyle

Add configuration file:

Add configuration file:

Choose checkstyle version 8.23 (the Grouper checkstyle.xml is not compatible with higher versions)


When you create a new Java class, there is a Checkstyle docked tab. You can scan your class (use the Grouper checkstyle and not the legacy one) before committing to make sure standards have been met.

Coding defaults

/****
* Copyright 2022 Internet2
*
* 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.
***/



Miscellaneous

Patch java example

This is not really Grouper specific, but if you want to patch a jar in a webapp, here is an example:

 cd /tmp
 mkdir grouper
 cd grouper
 mkdir src
 cd src
 unzip /opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/lib/grouper.jar
 ### note, might want to delete all other source and class files except the one you need ###
 emacs edu/internet2/middleware/grouper/app/loader/GrouperLoaderType.java

 javac -cp .:/opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/lib/subject.jar:/opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/lib/commons-lang.jar:/opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/lib/log4j.jar:/opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/lib/hibernate.jar:/opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/lib/commons-logging.jar:/opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/lib/DdlUtils.jar:/opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/lib/quartz.jar:/opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/lib/commons-collections.jar:/opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/lib/grouper.jar -sourcepath . edu/internet2/middleware/grouper/app/loader/GrouperLoaderType.java

 mkdir /opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/classes/edu/internet2
 mkdir /opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/classes/edu/internet2/middleware
 mkdir /opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/classes/edu/internet2/middleware/grouper
 mkdir /opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/classes/edu/internet2/middleware/grouper/app
 mkdir /opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/classes/edu/internet2/middleware/grouper/app/loader
 cp edu/internet2/middleware/grouper/app/loader/GrouperLoaderType* /opt/appserv/tomcat_3c/webapps/fastGrouperProdDaemon/WEB-INF/classes/edu/internet2/middleware/grouper/app/loader

See also 

Grouper Coding Standards 

Page down here for a section on Guidelines for Contribs to Grouper