Buonasera a tutti.
Ho sviluppato questo codice per poter ottenere una stringa aggiornata con i campi di giorno, mese, anno, ora, minuto .
package applicazioneGestione.utility;
import java.util.GregorianCalendar;
public class GetDate {
public static GregorianCalendar actualDate = new GregorianCalendar();
static String ActualYearString,ActualMonthString,ActualDayString;
static String ActualHourString,ActualMinuteString;
public static int getActualDay(){
int ActualDay=1;
ActualDay = actualDate.get(GregorianCalendar.DAY_OF_MONTH);
return ActualDay;}
public static int getActualMonth(){
int ActualMonth=1;
ActualMonth = actualDate.get(GregorianCalendar.MONTH)+1;
return ActualMonth;}
public static int getActualYear(){
int ActualYear=1990;
ActualYear = actualDate.get(GregorianCalendar.YEAR);
return ActualYear;}
public static int getActualHour(){
int ActualHour=0;
ActualHour = actualDate.get(GregorianCalendar.HOUR_OF_DAY);
return ActualHour;}
public static int getActualMinute(){
int ActualMinute=0;
ActualMinute = actualDate.get(GregorianCalendar.MINUTE);
return ActualMinute;}
public static String getActualYearString(){
ActualYearString = Integer.toString(getActualYear());
return ActualYearString;}
public static String getActualDayString(){
ActualDayString = Integer.toString(getActualDay());
return ActualDayString;}
public static String getActualHourString(){
ActualHourString = Integer.toString(getActualHour());
return ActualHourString;}
public static String getActualMinuteString(){
ActualMinuteString = Integer.toString(getActualMinute());
return ActualMinuteString;}
public static String composeMonthString(){
int MeseAttualeInt = getActualMonth();
String ComposedMonth = null;
if(MeseAttualeInt==1){
ComposedMonth = "gennaio";
}else if(MeseAttualeInt==2){
ComposedMonth = "febbraio";
}else if(MeseAttualeInt==3){
ComposedMonth = "marzo";
}else if(MeseAttualeInt==4){
ComposedMonth = "aprile";
}else if(MeseAttualeInt==5){
ComposedMonth = "maggio";
}else if(MeseAttualeInt==6){
ComposedMonth = "giugno";
}else if(MeseAttualeInt==7){
ComposedMonth = "luglio";
}else if(MeseAttualeInt==8){
ComposedMonth = "agosto";
}else if(MeseAttualeInt==9){
ComposedMonth = "settembre";
}else if(MeseAttualeInt==10){
ComposedMonth = "ottobre";
}else if(MeseAttualeInt==11){
ComposedMonth = "novembre";
}else if(MeseAttualeInt==12){
ComposedMonth = "dicembre";}
return ComposedMonth;
}
public static String getLogDate(){
String LogDate = null;
String anno = getActualYearString();
String mese = composeMonthString();
String giorno = getActualDayString();
String ora = getActualHourString();
String minuto = getActualMinuteString();
LogDate = giorno.concat(mese).concat(anno).concat("-").concat(ora).concat(":").concat(minuto);
System.out.println("La stringa ottenuta è: " + LogDate);
return LogDate;
}
}//Chiude la classe GetDate
Ora il mio problema è questo: tutti i metodi dichiarati in questa classe sono di tipo static quindi, quando io istanzio una chiamata al metodo getLogDate il tutto funziona benissimo, e mi restituisce la mia stringa perfettamente formattata aggiornataal minuto.
Il problema però e che il riferimento a questa classe è di tipo static, quindi non sò come fare a "chiudere" questa istanza, evocarne una nuova per ottenere una seconda stringa, generata dalla medesima funzione, ma aggiornata al minuto seguente, in modo da avere tante stringhe diverse, aggiornate all'ora in base alle varie chiamate alla stesse funzione.
Io credo che il problema sia dovuto proprio al modificatore "static", che mi istanzia in memoria la variabile "getLogDate" ma aggiornata alla prima invocazione del metodo, e non mi permette di istanziarne una seconda, od una terza, perchè static mantiene un riferimento unico.
Dunque chiedo: c'è un modo di "chiudere" l'attuale istanza e di generarne una nuova ad ogni chiamata?
Non posso, o meglio, non sò come togliere il modificatore "static" perchè sembra che la classe chiamante lo esiga.
Qualora possa servire, appendo anche il codice della classe chiamante:
package applicazioneGestione.Action;
import java.io.IOException;
import java.util.HashMap;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import applicazioneGestione.ActionForm.LoginActionForm;
import applicazioneGestione.utility.GetDate;
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
//Qui creo una variabile di tipo HashMap, all'interno della quale appoggio i valori
//di tutti i pin della raspi
HttpSession session = request.getSession();//Ottengo la session
HashMap<String, String> RaspiPinMap = new HashMap<String, String>();//Creo la nuova HashMap
session.setAttribute("RaspiPinMap", RaspiPinMap);//Metto l'HashMap in session
//Qui creo una nuova variabile boolean che metto sempre nello scope, nella quale, in
//seguito aggiornerò il valore scelto dall'utente se vuole abilitare o meno i log
boolean LoggerAbilitation = true;
session.setAttribute("LoggerAbilitation", LoggerAbilitation);
String usernameDaForm = null;
String passwordDaForm = null;
String LoggerAbilit = null;
//Instanzio un nuovo Logger e lo chiamo: "GlobalLogger"
Logger Log = Logger.getLogger("GlobalLogger");
LoginActionForm DatiDiAccesso = (LoginActionForm) form;
usernameDaForm = DatiDiAccesso.getUsername();
passwordDaForm = DatiDiAccesso.getPassword();
LoggerAbilit = request.getParameter("LogAbilitation");
if(LoggerAbilit.equals("LogEnabled")){
//Se arrivo qui, vuol dire che l'utente ha scelto di abilitare i logs
LoggerAbilitation = true;
session.setAttribute("LoggerAbilitation", LoggerAbilitation);
FileHandler fh = new FileHandler("FileDiLog");
Log.addHandler(fh);
Log.setLevel(Level.ALL);
}else if (LoggerAbilit.equals("LogDisenabled")){
//Se arrivo qui vuol dire che l'utente disabilita i logs.
//E quindi aggiorno la variabile in session
LoggerAbilitation = false;
session.setAttribute("LoggerAbilitation", LoggerAbilitation);}
GetDate.getLogDate();
if (usernameDaForm == null) {
return (mapping.findForward("stay"));
} else if (usernameDaForm.equals("leonardo") && passwordDaForm.equals("ombra")) {
return (mapping.findForward("successLogin"));
} else
return (mapping.findForward("failLogin"));
}// Chiude il metodo execute
@SuppressWarnings("unchecked")
public static HashMap<String, String> EstraiRaspiHashMap(HttpSession session){
HashMap<String, String> RaspiPinMap = (HashMap<String, String>) session.getAttribute("RaspiPinMap");
return RaspiPinMap;
}//Chiude il metodo EstraiRaspiHashMap
}// Chiude la classe LoginAction
La classe chiamante sò che funziona bene.