/***************************************************************************
* Copyright (c) 2004 - 2008 Fabrizio Boco fabboco@users.sourceforge.net *
* *
* *
* This is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License (version 2.1) as published by the Free Software Foundation *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
/**
- $Header: /usr/local/cvslocalrepository/SeamWebAppGenerator/src/org/boco/seamwebappgen/utils/Attic/Utils.java,v 1.1.2.6 2008/06/05 17:16:13 fab Exp $
- $Author: fab $
- $Revision: 1.1.2.6 $
- $Date: 2008/06/05 17:16:13 $
- $Log: Utils.java,v $
- Revision 1.1.2.6 2008/06/05 17:16:13 fab
- Modifiche per
-
- - Ajax support on bean fields
- - disableOnCreateIf and disableOnEditIf for the relationship
- - listFormatOff added to @ShowInForm
-
- Revision 1.1.2.5 2008/05/10 05:06:49 fab
- *** empty log message ***
-
- Revision 1.1.2.4 2008/05/05 14:30:01 fab
- Modifiche alla procedura di installazione
- Modifiche per gestione entity home
-
- Revision 1.1.2.3.2.1 2008/05/05 14:21:46 fab
- *** empty log message ***
-
- Revision 1.1.2.3 2008/04/22 05:37:55 fab
- Aggiornamento indirizzo di posta
-
- Revision 1.1.2.2 2008/04/21 13:08:21 fab
- Fix 0599/C
-
- Revision 1.1.2.1 2008/04/19 13:12:38 fab
- Modifiche varie per rafactoring
-
- Revision 1.1.2.1 2008/04/19 11:18:33 fab
- Refactoring
-
- Revision 1.10.4.4 2008/04/19 10:07:02 fab
- Aggiornamento riferimenti licenza
-
- Revision 1.10.4.3 2008/03/24 08:30:57 fab
- *** empty log message ***
-
- Revision 1.10.4.2 2008/03/23 07:48:32 fab
- *** empty log message ***
-
- Revision 1.10.4.1 2008/03/23 07:40:41 fab
- *** empty log message ***
-
- Revision 1.10 2008/01/16 13:15:53 fab
- Ancora un fix per la corretta sostituzione di tag multipli in codice completamente generato
-
- Revision 1.9 2008/01/07 19:49:52 bob
- Fix bug
-
- Revision 1.8 2008/01/05 09:21:22 fab
- Fix per la corretta sostituzione di tag multipli in codice completamente generato
-
- Revision 1.7 2007/12/30 12:23:15 fab
- Inserimento HtmlEditor
- Fix generazione jar
-
- Revision 1.6 2007/10/25 09:54:25 fab
- Dopo merge TRINIDAD_1.2.2
-
- Revision 1.1.2.5 2007/10/24 06:51:06 fab
- Fix vari dal ramo head
-
- Revision 1.5 2007/10/23 13:19:08 fab
- *** empty log message ***
-
- Revision 1.4 2007/10/13 11:56:07 fab
- Fix 0229/B
-
- Revision 1.1.2.4 2007/10/13 11:51:28 fab
- Fix 0229/B
-
- Revision 1.1.2.3 2007/10/13 10:53:53 fab
- Fix 0228/B
-
- Revision 1.1.2.2 2007/10/12 16:38:20 fab
- *** empty log message ***
-
- Revision 1.2 2007/10/06 07:06:50 fab
- *** empty log message ***
-
- Revision 1.1 2007/09/29 13:17:22 fab
- Nuova versione iniziale del 29/09/2007
-
- Revision 1.10.2.19 2007/08/30 13:26:47 fab
- Fix per la cancellazione dei file temporanei su windows
-
- Revision 1.10.2.18 2007/08/29 12:46:23 bob
- Tolta 'a' ed 'e' accentate
-
- Revision 1.10.2.17 2007/08/01 14:25:00 fab
- Fix per la corretta gestione dei selectionAttributes nel caso di attributi con più di una relazione
-
- Revision 1.10.2.16 2007/07/28 10:10:25 fab
- Eliminate println
-
- Revision 1.10.2.15 2007/06/23 09:15:48 fab
- Fix per la gestione di relatedAndNewItemsOnlyInPopUp con chiavi a componenti multiple
-
- Revision 1.10.2.14 2007/06/19 15:14:08 fab
- Fix per l'individuazione automatica del MASTER nelle relazione MASTER-DETAIL con cardinalita' 1:1
-
- Revision 1.10.2.13 2007/06/19 14:48:57 fab
- Fix nella makeShowAttributeVector per la corretta gestione degli attributi di slezione quando sono nella forma
- [relationship.]*attribute
-
- Revision 1.10.2.12 2007/06/19 06:58:53 fab
- Fix per la corretta gestione dei @ShowRelationshipAttributesInForm quando gli attributi sono nella forma [relationship.]*attribute
-
- Revision 1.10.2.11 2007/06/18 10:26:57 bob
- Fix per la corretta lettura da tastiera nella isMaster
-
- Revision 1.10.2.10 2007/06/16 12:25:11 fab
- Modifiche per supportare l'upload dei files con Trinidad - La versione esistente con Seam non funzionava
-
- Revision 1.10.2.9 2007/05/30 11:42:20 fab
- Fix sulla makeAdd per la corretta generazione delle relazioni N:M
-
- Revision 1.10.2.8 2007/03/25 09:30:39 dev
- Inserita la makeRolesCheckCondition
-
- Revision 1.10.2.7 2007/03/24 17:26:42 dev
- Fix sulle funzioni makeFirstLetterLowerCase e makeFirstLetterUpperCase
-
- Revision 1.10.2.6 2007/03/24 00:42:01 dev
- Reingegnerizzazione della creazione del progetto
-
- Revision 1.10.2.5 2007/03/06 10:06:13 dev
- Introdotta la funzione makeMethod2SingularField
- Modificata la ShowAttributeVector
-
- Revision 1.10.2.4 2007/02/14 13:02:08 dev
- Fix sulla makeRemoveAll
-
- Revision 1.10.2.3 2007/02/09 11:23:56 dev
- Fix sulla funzione SeamReplaceTag2String
-
- Revision 1.10.2.2 2007/02/07 21:04:29 dev
- Modifiche per supportare caratteri accentati nel file delle etichette
-
- Revision 1.10.2.1 2007/01/20 09:11:06 dev
- Tante modifiche che non sono descrivibili
-
- Revision 1.9 2007/01/07 14:35:08 dev
- Modifiche Dicembre 2006
-
- Revision 1.8 2007/01/02 20:22:04 dev
- Fix nella makeRemove
-
- Revision 1.7 2006/12/28 18:32:30 dev
- Modifiche per gestione della search
-
- Revision 1.6 2006/12/01 09:32:02 dev
- Fix per la gestione del codice custom
-
- Revision 1.5 2006/11/27 21:46:38 dev
- Modifiche per supportare gli attributi nella forma
-
- [relazione]*.attributo
-
- come attributi di selezione nelle PopUp
-
- Revision 1.4 2006/11/25 21:40:51 dev
- *** empty log message ***
-
- Revision 1.3 2006/11/25 21:39:51 dev
- Modificati il tipo di commenti per il codice custom
-
-
- Revision 1.2 2006/11/05 18:35:54 dev
- Aggiunta la makeRemoveAll
-
- Revision 1.1 2006/10/23 08:25:32 dev
- Prima versione separata dal generatore struts
-
- Revision 1.17 2006/09/03 14:29:58 dev
- Modifiche per le relazioni MASTER_DETAIL
-
- Revision 1.16 2006/08/25 10:10:37 dev
- Modifiche per la gestione delle PopUp
-
- Revision 1.15 2006/07/09 17:10:51 dev
- Fix sulla SeamReplaceTagAndSave
-
- Revision 1.14 2006/07/02 16:36:24 dev
- Inserita funzione SeamReplaceTagAndSave che dovrebbe evitare la riscrittura del file generato se uguale a quello esistente.
- Funziona ?
-
- Revision 1.13 2006/06/16 18:13:04 dev
- Fix vari più modifiche alla search ROTTA
-
- Revision 1.12 2006/06/14 18:26:21 dev
- Fix per evitare che le relazioni :1 implementate come listbox vengano inizializzate anche quando non sono utilizzte
-
- Revision 1.11 2006/06/12 16:16:39 dev
- Modificata la replaceTagAndSave
-
- Revision 1.10 2006/06/08 10:16:22 dev
- Modifiche per la nuova gestione del path nella list di bean detail in relazioni MASTER-DETAIL
-
- Revision 1.9 2006/05/25 09:12:26 dev
- gestione dell'annotazione ShowRelationshipAttributesInForm in azione init con attributi nella forma
-
- [relazione.]*attributo
-
- Revision 1.8 2006/05/25 08:31:06 dev
- gestione dell'annotazione ShowRelationshipAttributesInForm in azione init
-
- Revision 1.7 2006/05/24 20:13:53 dev
- Da completare i campi di sola visualizzazione nei form
-
- Revision 1.6 2006/05/23 08:30:29 dev
- Fix per supportare attributi nella forma
- [relazione.]*attributo
- nelle liste
-
- Revision 1.5 2006/04/20 10:15:11 dev
- Fix nella generazione delle pagine di ricerca sui listbox
**/
package org.boco.seamwebappgen.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.Vector;
import org.apache.commons.io.IOUtils;
import org.boco.seamwebappgen.info.Bean;
import org.boco.seamwebappgen.info.InfoReader;
import org.boco.seamwebappgen.info.Relationship;
import org.boco.seamwebappgen.info.SearchAttribute;
import org.boco.seamwebappgen.info.ShowAttribute;
/**
* Classe con funzioni di utilita'
*
*/
public class Utils
{
public static String makeFirstLetterUpperCase(String in)
{
if (in.equals(""))
return "";
String tmp = in.toUpperCase();
return tmp.substring(0, 1) + in.substring(1, in.length());
}
public static String makeFirstLetterLowerCase(String in)
{
if (in.equals(""))
return "";
String tmp = in.toLowerCase();
return tmp.substring(0, 1) + in.substring(1, in.length());
}
/**
* Dato un nome di un campo genera il metodo getter
*
* @param field
* Nome del campo
*
* @return Nome del metodo getter
*/
public static String makeGet(String field)
{
if (field == null || field.equals(""))
return "";
String tmp = field.toUpperCase();
String tmp1 = tmp.substring(0, 1);
return "get" + tmp1 + field.substring(1);
}
/**
* Dato un nome di un campo genera il metodo adder
*
* @param field
* Nome del campo
*
* @return Nome del metodo adder
*/
public static String makeAdd(String field)
{
String field1 = field;
// if(field1.endsWith("s"))
// {
// field1 = field1.substring(0,field1.length()-1);
// }
String tmp = field1.toUpperCase();
String tmp1 = tmp.substring(0, 1);
return "add" + tmp1 + field1.substring(1);
}
/**
* Dato un nome di un campo genera il metodo removeAll
*
* @param field
* Nome del campo
*
* @return Nome del metodo adder
*/
public static String makeRemoveAll(String field)
{
String field1 = field;
String tmp = field1.toUpperCase();
String tmp1 = tmp.substring(0, 1);
return "removeAll" + tmp1 + field1.substring(1);
}
/**
* Dato un nome di un campo genera il metodo remover
*
* @param field
* Nome del campo
*
* @return Nome del metodo remover
*/
public static String makeRemove(String field)
{
String field1 = field;
// if(field1.endsWith("s"))
// {
// field1 = field1.substring(0,field1.length()-1);
// }
String tmp = field1.toUpperCase();
String tmp1 = tmp.substring(0, 1);
return "remove" + tmp1 + field1.substring(1);
}
/**
* Restitruisce true se il bean ha almeno una relazione categorizzata
*
*/
public static boolean hasCategorizedRelationships(Bean bean)
{
Vector<Relationship> relationships = bean.getRelationships();
for (Relationship relationship : relationships)
{
if (relationship.isCategorized())
return true;
}
return false;
}
/**
* Restituisce il contenuto di header.txt presente nella directory html del
* progetto
*
* @throws FileNotFoundException
* @throws IOException
*/
public static String getHeader(String sourceDir) throws FileNotFoundException, IOException
{
String template = sourceDir + ".." + File.separator + "html" + File.separator + "header.txt";
String line;
String tmp = "";
LineNumberReader br = new LineNumberReader(new FileReader(template));
while ((line = br.readLine()) != null)
{
tmp += line;
}
br.close();
return tmp;
}
/**
* Restituisce tutti i frammenti di codice custom presenti in una pagina
*
* @param file
* @param type
* @throws IOException
*/
public static LinkedList<String> getYourCode(String file, CustomCodeType type) throws IOException, FileNotFoundException
{
LineNumberReader lr;
LinkedList<String> tmp = new LinkedList<String>();
String yourCode = "";
String line;
String startString = "";
String endString = "";
boolean yourCodeStarted = false;
if (type == CustomCodeType.JAVA)
{
startString = "// YOUR CODE GOES HERE";
endString = "// END OF YOUR CODE";
}
if (type == CustomCodeType.JSP)
{
startString = "<!-- YOUR CODE GOES HERE -->";
endString = "<!-- END OF YOUR CODE -->";
//startString = "<%/* YOUR CODE GOES HERE */%>";
//endString = "<%/* END OF YOUR CODE */%>";
}
try
{
lr = new LineNumberReader(new FileReader(file));
}
catch (FileNotFoundException e)
{
// Si entra qui se il file target ancora non e' mai
// stato generato
// System.out.println("************ File da creare ****************");
// System.out.println(file);
// System.out.println("********************************************");
return tmp;
}
try
{
while ((line = lr.readLine()) != null)
{
line = line.replaceAll("//\t", "// ");
if (line.contains(startString))
{
yourCodeStarted = true;
line = lr.readLine();
line = line.replaceAll("//\t", "// ");
}
if (yourCodeStarted)
{
if (line.contains(endString))
{
tmp.addLast(yourCode);
yourCode = "";
yourCodeStarted = false;
}
else
{
yourCode += line;
if (!line.equals("\r\n"))
yourCode += "\r\n";
}
}
}
}
catch (NullPointerException e)
{
System.out.println("File " + file + "\r\n");
throw new NullPointerException();
}
return tmp;
}
public static void SeamReplaceTagAndSave(HashMap<String, String> tags, LinkedList<String> yourJavaScriptCode, LinkedList<String> yourCode, String template, String targetFile) throws FileNotFoundException, IOException
{
LineNumberReader br;
FileWriter fileOutput;
try
{
br = new LineNumberReader(new FileReader(template));
}
catch (FileNotFoundException e)
{
JarFileReader jfr = new JarFileReader();
br = new LineNumberReader(new InputStreamReader(jfr.readFile(template)));
}
try
{
fileOutput = new FileWriter(new File(targetFile + "NEW"));
}
catch (FileNotFoundException e)
{
// System.out.println("FILE: " + targetFile + "NEW");
// System.out.println(e.getMessage());
throw new FileNotFoundException(e.getMessage());
}
String line;
while ((line = br.readLine()) != null)
{
Set<String> keys = tags.keySet();
// Per ogni linea tenta la sostituzione di ogni tag
for (String key : keys)
{
line = line.replaceAll(key, tags.get(key));
}
if (!line.equals("\r\n") && (!line.equals("@YourJavaScriptCode")) && (!line.equals("@YourCode")))
line += "\r\n";
// if (line.contains("@YourCode"))
if (numberOfYourCodeTags(line) == 1)
{
String code;
if (yourCode.isEmpty())
code = "";
else
{
code = yourCode.removeFirst();
code = code.replaceAll("\"", "\\\\\"");
}
line = line.replaceAll("@YourCode", code);
}
if (numberOfYourCodeTags(line) > 1)
{
String code;
while (line.contains("@YourCode"))
{
if (yourCode.size() > 0)
{
code = yourCode.removeFirst();
code = code.replaceAll("\"", "\\\\\"");
}
else
{
code = "";
}
line = line.replaceFirst("@YourCode", code);
}
}
if (line.contains("@YourJavaScriptCode"))
{
String code;
if (yourJavaScriptCode.isEmpty())
code = "";
else
{
code = yourJavaScriptCode.removeFirst();
code = code.replaceAll("\"", "\\\\\"");
}
line = line.replaceAll("@YourJavaScriptCode", code);
}
fileOutput.write(line);
fileOutput.flush();
}
fileOutput.flush();
fileOutput.close();
File oldTargetFile = new File(targetFile);
if (!oldTargetFile.exists())
{
//System.out.println("File " + targetFile + " e' stato creato");
/**
* Nel file target debbono essere inseriti i tag per CVS
*/
}
if (oldTargetFile.exists() && IOUtils.contentEquals(new FileInputStream(new File(targetFile + "NEW")), new FileInputStream(oldTargetFile)))
{
// Il nuovo file generato e' uguale al precedente
// Il nuovo viene cancellato
File f = new File(targetFile + "NEW");
f.deleteOnExit();
}
else
{
// Il nuovo file generato e' diverso da quello gia' esistente
// Il nuovo file viene copiato su quello esistente e poi cancellato
IOUtils.copy(new FileInputStream(new File(targetFile + "NEW")), new FileOutputStream(new File(targetFile)));
File f = new File(targetFile + "NEW");
f.deleteOnExit();
}
}
public static void SeamReplaceTagAndSave(HashMap<String, String> tags, LinkedList<String> yourCode, String template, String targetFile) throws FileNotFoundException, IOException
{
SeamReplaceTagAndSave(tags, null, yourCode, template, targetFile);
}
public static String SeamReplaceTag2String(HashMap<String, String> tags, LinkedList<String> yourJavaScriptCode, LinkedList<String> yourCode, String template) throws FileNotFoundException, IOException
{
LineNumberReader br;
String ret = "";
try
{
br = new LineNumberReader(new FileReader(template));
}
catch (FileNotFoundException e)
{
JarFileReader jfr = new JarFileReader();
br = new LineNumberReader(new InputStreamReader(jfr.readFile(template)));
// System.out.println("FILE: " + template);
// System.out.println(e.getMessage());
//
// throw new FileNotFoundException();
}
String line;
while ((line = br.readLine()) != null)
{
Set<String> keys = tags.keySet();
// Per ogni linea tenta la sostituzione di ogni tag
for (String key : keys)
{
line = line.replaceAll(key + "\r\n", tags.get(key));
line = line.replaceAll(key, tags.get(key));
}
if (!line.equals("\r\n") && (!line.equals("@YourJavaScriptCode")) && (!line.equals("@YourCode")))
line += "\r\n";
if (line.contains("@YourCode"))
{
String code;
if (yourCode.isEmpty())
code = "";
else
code = yourCode.removeFirst();
line = line.replaceAll("@YourCode", code);
}
if (line.contains("@YourJavaScriptCode"))
{
String code;
if (yourJavaScriptCode.isEmpty())
code = "";
else
code = yourJavaScriptCode.removeFirst();
line = line.replaceAll("@YourJavaScriptCode", code);
}
ret += line;
}
return ret;
}
/**
* Se il campo e' nella forma
*
* relazione.nome_campo
*
* restituisce solo
*
* nome_campo
*
* altrimenti restituisce il campo inalterato
*
*/
public static String stripDot(String field)
{
String ret = "";
int dotIndex = field.indexOf(".");
if (dotIndex == -1)
return field;
ret = field.substring(dotIndex + 1, field.length());
return ret;
}
/**
*
* Se un campo e' nella forma
*
* relazione.campo
*
* restituisce
*
* relazione_campo
*
* Viene utilizzato per gli attributi di selezione delle relazioni
*
*/
public static String dot2Underscore(String field)
{
return field.replaceAll("[.]", "_");
}
/**
* Restitruisce la prima relazione categorizzata
*
*/
public static Relationship getCategorizedRelationship(Bean bean)
{
Vector<Relationship> relationships = bean.getRelationships();
for (Relationship relationship : relationships)
{
if (relationship.isCategorized())
return relationship;
}
return null;
}
/**
* Dato un campo nella forma
*
* relazione.campo
*
* restituisce la relazione
*
*/
/*
public static String splitRelation(String field)
{
return field.substring(0, field.indexOf("."));
}
*/
/**
* Dato un campo nella forma
*
* relazione.campo
*
* restituisce il campo
*
*/
/*
public static String splitAttribute(String field)
{
return field.substring(field.indexOf(".") + 1, field.length());
}
*/
/**
* Dato un metodo get<Field> o set<Field> restituisce <Field>
*
*
*/
public static String makeMethod2Field(String getMethod)
{
return makeFirstLetterLowerCase(getMethod.substring(3, getMethod.length()));
}
/**
* Dato un metodo di una relazione :N
* <br>
* get<Field>s o set<Field>s
*<br>
* restituisce <Field>
*
*/
public static String makeMethod2SingularField(String getMethod)
{
return makeFirstLetterLowerCase(getMethod.substring(3, getMethod.length() - 1));
}
/**
* Dato un campo <Field> restituisce il metodo
*
* set<Field>
*
*/
public static String makeSet(String field)
{
String tmp = field.toUpperCase();
String tmp1 = tmp.substring(0, 1);
return "set" + tmp1 + field.substring(1);
}
/**
* Dato un metodo
*
* get<Field>
*
* restituisce il metodo
*
* set<Field>
*
*/
public static String switchGet2Set(String method)
{
String field = method.substring(3, method.length());
return makeSet(field);
}
/**
*
* Definisce se il bean di partenza il lato master di una relazione di tipo master-detail
* utilizzando le cardinalita' e dei mappedby
*
* @throws IOException
*/
public static boolean isMaster(Relationship rel) throws IOException
{
if (rel.isFromMany() && rel.isToMany())
{
if (rel.getMappedBy() == null || rel.getMappedBy().equals(""))
{
// Il master deve essere il bean che non e' owner della relazione
// Un bean e' owner della relazione se non contiene mappedby
return false;
}
return true;
}
if (!rel.isFromMany() && !rel.isToMany())
{
/** Relazione 1:1 di tipo MASTER-DETAIL **/
if (rel.getMappedBy() == null || rel.getMappedBy().equals(""))
{
// Il master deve essere il bean che non e' owner della relazione
// Un bean e' owner della relazione se non contiene mappedby
return false;
}
return true;
}
if (rel.isToMany())
{
return true;
}
else
{
return false;
}
}
/**
* Data una lista di nomi di attributi, restituisce un vettore con gli
* attributi
*
*/
public static Vector<ShowAttribute> makeShowAttributeVector(String beanName, String showAttributes[], InfoReader infoReader) throws Exception
{
Vector<ShowAttribute> ret = new Vector<ShowAttribute>();
for (int i = 0; i < showAttributes.length; i++)
{
ShowAttribute tmp = null;
if (showAttributes[i].contains("."))
{
// L'attributo contiene anche i riferimenti a relazioni
Vector<String> items = Utils.splitRelationships(showAttributes[i]);
tmp = new ShowAttribute(items.lastElement());
String toBeanName = beanName;
for (int m = 0; m < items.size() - 1; m++)
{
Relationship rel = infoReader.getRelationship(toBeanName, items.get(m));
tmp.addRelationship(rel);
toBeanName = rel.getToBeanName();
}
tmp.setType(infoReader.getBeanAttribute(tmp.getRelationship().getToBeanName(), tmp.getName()).getType());
tmp.setImplementationType(infoReader.getBeanAttribute(toBeanName, tmp.getName()).getImplementationType());
tmp.setFormFormatOff(infoReader.getBeanAttribute(toBeanName, tmp.getName()).isFormFormatOff());
tmp.setListFormatOff(infoReader.getBeanAttribute(toBeanName, tmp.getName()).isListFormatOff());
}
else
{
tmp = new ShowAttribute(showAttributes[i]);
tmp.setType(infoReader.getBeanAttribute(beanName, tmp.getName()).getType());
tmp.setImplementationType(infoReader.getBeanAttribute(beanName, tmp.getName()).getImplementationType());
tmp.setFormFormatOff(infoReader.getBeanAttribute(beanName, tmp.getName()).isFormFormatOff());
tmp.setListFormatOff(infoReader.getBeanAttribute(beanName, tmp.getName()).isListFormatOff());
}
ret.add(tmp);
}
return ret;
}
/**
* Dato un bean, restituisce per ciascuna relazione su cui viene effettuata una ricerca il numero di attributi
* che le appartengono in un HashMap
* <br>
* <ul>
* <li>Chiave: nome della relaizione</li>
* <li>Proprieta': numero di attrinuti che sono riferiti alla relazione
* </ul>
*
*
*/
public static HashMap<String, Integer> searchUsedRelationshipCount(Bean bean)
{
HashMap<String, Integer> relationshipCounts = new HashMap<String, Integer>();
for (int i = 0; i < bean.getSearchAttributes().size(); i++)
{
SearchAttribute sAttr = bean.getSearchAttributes().get(i);
if (sAttr.belongsToRelationship())
{
String relName;
if (sAttr.getName().contains("."))
{
Vector<String> items = Utils.splitRelationships(sAttr.getName());
relName = items.get(items.size() - 2);
}
else
{
relName = sAttr.getRelationship().getName();
}
if (relationshipCounts.containsKey(relName))
{
Integer count;
count = (Integer) relationshipCounts.get(relName);
relationshipCounts.remove(relName);
relationshipCounts.put(relName, new Integer(count.intValue() + 1));
}
else
{
relationshipCounts.put(relName, new Integer(1));
}
}
}
return relationshipCounts;
}
/**
* Dato un attributo nella forma
* <br>
* [relazione.]*attributo
* <br>
* restituisce un array contenente le relazioni e l'attributo
*
*/
public static Vector<String> splitRelationships(String attributeName)
{
Vector<String> ret = new Vector<String>();
StringTokenizer st = new StringTokenizer(attributeName, ".");
while (st.hasMoreTokens())
{
ret.add(st.nextToken());
}
return ret;
}
/**
* Restituisce true se la relazione deve essere utilizzata per visualizzare degli attributi nel form del bean
*
*/
/*
public static boolean RelationshipUsedToShowAttributes(Vector<ShowAttribute> showInFormAttributes, String relationshipName)
{
for(int i=0; i<showInFormAttributes.size(); i++)
{
ShowAttribute attr = showInFormAttributes.get(i);
if (attr.getRelationship().getName().equals(relationshipName))
return true;
}
return false;
}
*/
/**
* Data una relazione, restituisce tutti gli attributi di sola visualzizzazione nel form
*
*/
public static Vector<ShowAttribute> getShowInFormAttributes(Vector<ShowAttribute> showInFormAttributes, String relationshipName)
{
Vector<ShowAttribute> ret = new Vector<ShowAttribute>();
for (int i = 0; i < showInFormAttributes.size(); i++)
{
ShowAttribute attr = showInFormAttributes.get(i);
if (attr.getRelationship() != null && attr.getRelationship().getName().equals(relationshipName))
ret.add(attr);
}
return ret;
}
/**
* Data una lista di attributi di ricerca e una relazione, verifica se questa
* e' utilizzata per uno degli attributi
*/
public static boolean isUsedInSearch(Vector<SearchAttribute> searchAttributes, Relationship rel)
{
for (int i = 0; i < searchAttributes.size(); i++)
{
SearchAttribute attr = searchAttributes.get(i);
if (attr.getRelationship() != null && attr.getRelationship().equals(rel))
{
return true;
}
}
return false;
}
/**
* Data una lista di ruoli abilitati restituisce la condizione di controllo
*/
public static String makeRolesCheckCondition(Vector<String> rolesList)
{
String rolesCheck = "#{";
for (int i = 0; i < rolesList.size(); i++)
{
if (i > 0)
rolesCheck += " or ";
rolesCheck += "s:hasRole('" + rolesList.get(i) + "')";
}
rolesCheck += "}";
return rolesCheck;
}
private static int numberOfYourCodeTags(String buffer)
{
int pos = 0;
int ret = 0;
while ((pos = buffer.indexOf("@YourCode", pos)) != -1)
{
pos += 9;
ret++;
}
return ret;
}
}