001 // Copyright 2006-2007 Daniel Gredler 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package net.sf.beanform.integration; 016 017 import java.util.SortedMap; 018 import java.util.TreeMap; 019 020 import javax.persistence.Basic; 021 import javax.persistence.Column; 022 023 import net.sf.beanform.prop.BeanProperty; 024 025 /** 026 * Provides integration with EJB3 annotations. 027 * 028 * @see http://java.sun.com/javaee/5/docs/api/javax/persistence/package-summary.html 029 * @author Daniel Gredler 030 */ 031 public class Ejb3Integrator implements Integrator { 032 033 public static final boolean COLUMN_NULLABLE_DEFAULT = true; 034 public static final int COLUMN_LENGTH_DEFAULT = 255; 035 public static final boolean BASIC_OPTIONAL_DEFAULT = true; 036 037 public SortedMap<String, String> getValidation( BeanProperty prop ) { 038 039 SortedMap<String, String> validations = new TreeMap<String, String>(); 040 041 Column c = prop.getAnnotation( Column.class ); 042 if( c != null ) { 043 if( c.nullable() == false ) { 044 validations.put( REQUIRED, REQUIRED ); 045 } 046 if( prop.isString() ) { 047 int maxLength = c.length(); 048 validations.put( MAX_LENGTH, MAX_LENGTH + "=" + maxLength ); 049 } 050 } 051 052 Basic b = prop.getAnnotation( Basic.class ); 053 if( b != null ) { 054 if( b.optional() == false ) { 055 validations.put( REQUIRED, REQUIRED ); 056 } 057 } 058 059 return validations; 060 } 061 062 public Integer getMaxLength( BeanProperty prop ) { 063 064 Integer maxLength = null; 065 066 Column c = prop.getAnnotation( Column.class ); 067 if( c != null ) { 068 maxLength = c.length(); 069 } 070 071 return maxLength; 072 } 073 074 public boolean isNullable( BeanProperty prop ) { 075 076 boolean nullable = true; 077 078 Column c = prop.getAnnotation( Column.class ); 079 if( c != null ) { 080 if( c.nullable() == false ) { 081 nullable = false; 082 } 083 } 084 085 Basic b = prop.getAnnotation( Basic.class ); 086 if( b != null ) { 087 if( b.optional() == false ) { 088 nullable = false; 089 } 090 } 091 092 return nullable; 093 } 094 095 }