/* * Copyright (C) 2012 AXIA Studio (http://www.axiastudio.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.axiastudio.suite; import com.axiastudio.pypapi.Register; import com.axiastudio.pypapi.db.Database; import com.axiastudio.pypapi.db.IDatabase; import com.axiastudio.pypapi.db.IFactory; import com.axiastudio.pypapi.db.Store; import com.axiastudio.pypapi.ui.IForm; import com.axiastudio.pypapi.ui.IUIFile; import com.axiastudio.pypapi.ui.Window; import com.axiastudio.suite.base.entities.CambiaPassword; import com.axiastudio.suite.base.entities.IUtente; import com.axiastudio.suite.base.entities.Utente; import com.axiastudio.suite.pratiche.forms.FormTipoPratica; import com.axiastudio.suite.protocollo.forms.FormMailboxList; import com.axiastudio.suite.protocollo.forms.FormScrivania; import com.axiastudio.suite.protocollo.forms.FormTitolario; import com.trolltech.qt.core.QObject; import com.trolltech.qt.core.QSignalMapper; import com.trolltech.qt.gui.*; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.TypedQuery; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Tiziano Lattisi <tiziano at axiastudio.it> */ public class Mdi extends QMainWindow implements IMdi { private static String ICON = "classpath:com/axiastudio/pypapi/ui/resources/pypapi32.png"; private QMdiArea workspace; private QTreeWidget tree; private QSystemTrayIcon trayIcon; private QMenu menuWindows; private QAction actionCloseAll; private QAction actionTile; private QAction actionCascade; private QAction actionNext; private QAction actionPrevious; private QAction actionSeparator; private QAction actionClose; private QSignalMapper windowMapper; public Mdi(){ this.setWindowIcon(new QIcon(ICON)); this.createWorkspace(); this.createTree(); //this.createSystemTray(); this.createMenu(); Register.registerUtility(this, IMdi.class); } private void createMenu(){ menuWindows = this.menuBar().addMenu("Finestre"); actionClose = new QAction("Chiudi", this); actionClose.triggered.connect(this.workspace, "closeActiveSubWindow()"); actionCloseAll = new QAction("Chiudi tutte", this); actionCloseAll.triggered.connect(this.workspace, "closeAllSubWindows()"); actionTile = new QAction("Allinea", this); actionTile.triggered.connect(this.workspace, "tileSubWindows()"); actionCascade = new QAction("Disponi a cascata", this); actionCascade.triggered.connect(this.workspace, "cascadeSubWindows()"); actionNext = new QAction("Finestra successiva", this); actionNext.triggered.connect(this.workspace, "activateNextSubWindow()"); actionPrevious = new QAction("Finestra precedente", this); actionPrevious.triggered.connect(this.workspace, "activatePreviousSubWindow()"); actionSeparator = new QAction(this); actionSeparator.setSeparator(true); menuWindows.aboutToShow.connect(this, "refreshMenuWindows()"); } private void refreshMenuWindows(){ menuWindows.clear(); menuWindows.addAction(actionClose); menuWindows.addAction(actionCloseAll); menuWindows.addAction(actionSeparator); menuWindows.addAction(actionTile); menuWindows.addAction(actionCascade); menuWindows.addAction(actionSeparator); menuWindows.addAction(actionNext); menuWindows.addAction(actionPrevious); menuWindows.addAction(actionSeparator); menuWindows.addAction(actionCloseAll); for( QMdiSubWindow subWindow: this.workspace.subWindowList() ){ String title=""; if( subWindow.widget() instanceof QMainWindow ){ title = ((QMainWindow) subWindow.widget()).windowTitle(); } if( subWindow.widget() instanceof QDialog ){ title = ((QDialog) subWindow.widget()).windowTitle(); } QAction action = menuWindows.addAction(title); action.setCheckable(true); action.setChecked(subWindow.equals(this.workspace.activeSubWindow())); action.triggered.connect(windowMapper, "map()"); windowMapper.setMapping(action, subWindow); } } private void createSystemTray(){ QMenu menu = new QMenu(this); menu.addAction("prova"); this.trayIcon = new QSystemTrayIcon(new QIcon(ICON), this); this.trayIcon.setContextMenu(menu); this.trayIcon.show(); this.trayIcon.showMessage("PyPaPi Suite", "Applicazione avviata."); } private void createWorkspace() { QSplitter splitter = new QSplitter(); this.tree = new QTreeWidget(splitter); this.workspace = new QMdiArea(splitter); this.setCentralWidget(splitter); this.workspace.subWindowActivated.connect(this, "refreshMenuWindows()"); windowMapper = new QSignalMapper(this); windowMapper.mappedQObject.connect(this, "setActiveSubWindow(QObject)"); } private void setActiveSubWindow(QObject obj){ this.workspace.setActiveSubWindow((QMdiSubWindow) obj); } private void createTree() { this.tree.setColumnCount(2); this.tree.setHeaderLabel("PyPaPi Suite"); this.tree.setColumnHidden(1, true); Utente autenticato = (Utente) Register.queryUtility(IUtente.class); /* scrivania */ QTreeWidgetItem itemScrivania = new QTreeWidgetItem(this.tree); itemScrivania.setText(0, "Scrivania"); itemScrivania.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/house.png")); itemScrivania.setText(1, "SCRIVANIA"); itemScrivania.setDisabled(!autenticato.getOperatoreprotocollo()); /* Protocollo informatico */ QTreeWidgetItem itemProtocolloInformatico = new QTreeWidgetItem(this.tree); itemProtocolloInformatico.setText(0, "Protocollo informatico"); this.tree.addTopLevelItem(itemProtocolloInformatico); itemProtocolloInformatico.setDisabled(!autenticato.getOperatoreprotocollo()); QTreeWidgetItem itemProtocollo = new QTreeWidgetItem(itemProtocolloInformatico); itemProtocollo.setText(0, "Protocollo"); itemProtocollo.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/email.png")); itemProtocollo.setText(1, "com.axiastudio.suite.protocollo.entities.Protocollo"); itemProtocollo.setText(2, "NEW"); QTreeWidgetItem itemTitolario = new QTreeWidgetItem(itemProtocolloInformatico); itemTitolario.setText(0, "Titolario"); itemTitolario.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/email.png")); itemTitolario.setText(1, "TITOLARIO"); QTreeWidgetItem itemPubblicazioni = new QTreeWidgetItem(itemProtocolloInformatico); itemPubblicazioni.setText(0, "Pubblicazioni"); itemPubblicazioni.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/email.png")); itemPubblicazioni.setText(1, "com.axiastudio.suite.pubblicazioni.entities.Pubblicazione"); //itemPubblicazioni.setDisabled(true); QTreeWidgetItem itemEmail = new QTreeWidgetItem(itemProtocolloInformatico); itemEmail.setText(0, "PEC"); itemEmail.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/email.png")); itemEmail.setText(1, "EMAIL"); itemEmail.setDisabled(true); /* Anagrafiche */ QTreeWidgetItem itemAnagrafiche = new QTreeWidgetItem(this.tree); itemAnagrafiche.setText(0, "Anagrafiche"); this.tree.addTopLevelItem(itemAnagrafiche); itemAnagrafiche.setDisabled(!autenticato.getOperatoreanagrafiche()); QTreeWidgetItem itemSoggetti = new QTreeWidgetItem(itemAnagrafiche); itemSoggetti.setText(0, "Soggetti"); itemSoggetti.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemSoggetti.setText(1, "com.axiastudio.suite.anagrafiche.entities.Soggetto"); itemSoggetti.setText(2, "NEW"); QTreeWidgetItem itemGruppi = new QTreeWidgetItem(itemAnagrafiche); itemGruppi.setText(0, "Gruppi"); itemGruppi.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemGruppi.setText(1, "com.axiastudio.suite.anagrafiche.entities.Gruppo"); QTreeWidgetItem itemRelazioni = new QTreeWidgetItem(itemAnagrafiche); itemRelazioni.setText(0, "Relazioni"); itemRelazioni.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemRelazioni.setText(1, "com.axiastudio.suite.anagrafiche.entities.Relazione"); /* Pratiche */ QTreeWidgetItem itemPraticheRoot = new QTreeWidgetItem(this.tree); itemPraticheRoot.setText(0, "Pratiche..."); this.tree.addTopLevelItem(itemPraticheRoot); itemPraticheRoot.setDisabled(!autenticato.getOperatorepratiche()); QTreeWidgetItem itemPratiche = new QTreeWidgetItem(itemPraticheRoot); itemPratiche.setText(0, "Pratiche"); itemPratiche.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemPratiche.setText(1, "com.axiastudio.suite.pratiche.entities.Pratica"); itemPratiche.setText(2, "NEW"); QTreeWidgetItem itemTipoPratica = new QTreeWidgetItem(itemPraticheRoot); itemTipoPratica.setText(0, "Tipo di pratica"); itemTipoPratica.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemTipoPratica.setText(1, "com.axiastudio.suite.pratiche.entities.TipoPratica"); QTreeWidgetItem itemTipiPratica = new QTreeWidgetItem(itemPraticheRoot); itemTipiPratica.setText(0, "Struttura tipi di pratica"); itemTipiPratica.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/email.png")); itemTipiPratica.setText(1, "TIPIPRATICA"); /* Richieste */ QTreeWidgetItem itemRichiesteRoot = new QTreeWidgetItem(this.tree); itemRichiesteRoot.setText(0, "Richieste..."); this.tree.addTopLevelItem(itemRichiesteRoot); itemRichiesteRoot.setDisabled(true); //itemRichiesteRoot.setDisabled(!autenticato.getOperatorepratiche()); QTreeWidgetItem itemRichieste = new QTreeWidgetItem(itemRichiesteRoot); itemRichieste.setText(0, "Richieste"); itemRichieste.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/email.png")); itemRichieste.setText(1, "com.axiastudio.suite.richieste.entities.Richiesta"); itemRichieste.setText(2, "NEW"); /* Delibere e determine */ QTreeWidgetItem itemDelibereDetermineRoot = new QTreeWidgetItem(this.tree); itemDelibereDetermineRoot.setText(0, "Delibere e determine"); this.tree.addTopLevelItem(itemDelibereDetermineRoot); itemDelibereDetermineRoot.setDisabled(!autenticato.getOperatorepratiche()); QTreeWidgetItem itemDelibere = new QTreeWidgetItem(itemDelibereDetermineRoot); itemDelibere.setText(0, "Delibere"); itemDelibere.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemDelibere.setText(1, "com.axiastudio.suite.deliberedetermine.entities.Determina"); itemDelibere.setText(2, "NEW"); itemDelibere.setDisabled(true); QTreeWidgetItem itemDetermine = new QTreeWidgetItem(itemDelibereDetermineRoot); itemDetermine.setText(0, "Determine"); itemDetermine.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemDetermine.setText(1, "com.axiastudio.suite.deliberedetermine.entities.Determina"); itemDetermine.setText(2, "NEW"); QTreeWidgetItem itemDetermineVistoBilancio = new QTreeWidgetItem(itemDelibereDetermineRoot); itemDetermineVistoBilancio.setText(0, "Determine in attesa visto bilancio"); itemDetermineVistoBilancio.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemDetermineVistoBilancio.setText(1, "com.axiastudio.suite.deliberedetermine.entities.Determina"); String faseVistoBilancio = SuiteUtil.trovaCostante("FASE_VISTO_BILANCIO").getValore(); itemDetermineVistoBilancio.setText(2, "NAMEDQUERY:inAttesaDiVistoDiBilancio:idfase,Integer,"+faseVistoBilancio); QTreeWidgetItem itemSedute = new QTreeWidgetItem(itemDelibereDetermineRoot); itemSedute.setText(0, "Sedute"); itemSedute.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/group.png")); itemSedute.setText(1, "com.axiastudio.suite.sedute.entities.Seduta"); itemSedute.setText(2, "NEW"); itemSedute.setDisabled(true); /* Procedimento */ QTreeWidgetItem itemProcedimentiRoot = new QTreeWidgetItem(this.tree); itemProcedimentiRoot.setText(0, "Procedimenti"); this.tree.addTopLevelItem(itemProcedimentiRoot); itemProcedimentiRoot.setDisabled(!autenticato.getAmministratore()); QTreeWidgetItem itemProcedimento = new QTreeWidgetItem(itemProcedimentiRoot); itemProcedimento.setText(0, "Procedimenti"); itemProcedimento.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemProcedimento.setText(1, "com.axiastudio.suite.procedimenti.entities.Procedimento"); itemProcedimento.setText(2, "NEW"); QTreeWidgetItem itemNorma = new QTreeWidgetItem(itemProcedimentiRoot); itemNorma.setText(0, "Norme"); itemNorma.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemNorma.setText(1, "com.axiastudio.suite.procedimenti.entities.Norma"); itemNorma.setText(2, "NEW"); /* Configurazione sedute */ QTreeWidgetItem itemConfigurazioneSeduteRoot = new QTreeWidgetItem(this.tree); itemConfigurazioneSeduteRoot.setText(0, "Configurazione sedute"); this.tree.addTopLevelItem(itemConfigurazioneSeduteRoot); itemConfigurazioneSeduteRoot.setDisabled(!autenticato.getAmministratore()); QTreeWidgetItem itemCarica = new QTreeWidgetItem(itemConfigurazioneSeduteRoot); itemCarica.setText(0, "Cariche"); itemCarica.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemCarica.setText(1, "com.axiastudio.suite.procedimenti.entities.Carica"); QTreeWidgetItem itemCommissione = new QTreeWidgetItem(itemConfigurazioneSeduteRoot); itemCommissione.setText(0, "Commissioni"); itemCommissione.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemCommissione.setText(1, "com.axiastudio.suite.sedute.entities.Commissione"); QTreeWidgetItem itemCaricaCommissione = new QTreeWidgetItem(itemConfigurazioneSeduteRoot); itemCaricaCommissione.setText(0, "Cariche-commissioni"); itemCaricaCommissione.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/vcard.png")); itemCaricaCommissione.setText(1, "com.axiastudio.suite.sedute.entities.CaricaCommissione"); QTreeWidgetItem itemTipoSeduta = new QTreeWidgetItem(itemConfigurazioneSeduteRoot); itemTipoSeduta.setText(0, "Tipi di seduta"); itemTipoSeduta.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/group.png")); itemTipoSeduta.setText(1, "com.axiastudio.suite.sedute.entities.TipoSeduta"); itemTipoSeduta.setDisabled(!autenticato.getAmministratore()); /* Amministrazione */ QTreeWidgetItem itemAmministrazione = new QTreeWidgetItem(this.tree); itemAmministrazione.setText(0, "Amministrazione"); this.tree.addTopLevelItem(itemAmministrazione); QTreeWidgetItem itemCostanti = new QTreeWidgetItem(itemAmministrazione); itemCostanti.setText(0, "Costanti"); itemCostanti.setIcon(0, new QIcon("classpath:com/axiastudio/pypapi/ui/resources/cog.png")); itemCostanti.setText(1, "com.axiastudio.suite.generale.entities.Costante"); itemCostanti.setDisabled(!autenticato.getAmministratore()); QTreeWidgetItem itemEtichette = new QTreeWidgetItem(itemAmministrazione); itemEtichette.setText(0, "Etichette"); itemEtichette.setIcon(0, new QIcon("classpath:com/axiastudio/pypapi/ui/resources/cog.png")); itemEtichette.setText(1, "com.axiastudio.suite.generale.entities.Etichetta"); itemEtichette.setDisabled(!autenticato.getAmministratore()); QTreeWidgetItem itemUtenti = new QTreeWidgetItem(itemAmministrazione); itemUtenti.setText(0, "Utenti"); itemUtenti.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/user.png")); itemUtenti.setText(1, "com.axiastudio.suite.base.entities.Utente"); itemUtenti.setDisabled(!autenticato.getAmministratore()); QTreeWidgetItem itemUffici = new QTreeWidgetItem(itemAmministrazione); itemUffici.setText(0, "Uffici"); itemUffici.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/group.png")); itemUffici.setText(1, "com.axiastudio.suite.base.entities.Ufficio"); itemUffici.setDisabled(!autenticato.getAmministratore()); QTreeWidgetItem itemModelli = new QTreeWidgetItem(itemAmministrazione); itemModelli.setText(0, "Modelli"); itemModelli.setIcon(0, new QIcon("classpath:com/axiastudio/pypapi/ui/resources/cog.png")); itemModelli.setText(1, "com.axiastudio.suite.modelli.entities.Modello"); itemModelli.setDisabled(!autenticato.getAmministratore()); QTreeWidgetItem itemGiunte = new QTreeWidgetItem(itemAmministrazione); itemGiunte.setText(0, "Giunte"); itemGiunte.setIcon(0, new QIcon("classpath:com/axiastudio/pypapi/ui/resources/cog.png")); itemGiunte.setText(1, "com.axiastudio.suite.base.entities.Giunta"); itemGiunte.setDisabled(!autenticato.getAmministratore()); QTreeWidgetItem itemDeleghe = new QTreeWidgetItem(itemAmministrazione); itemDeleghe.setText(0, "Incarichi e deleghe"); itemDeleghe.setIcon(0, new QIcon("classpath:com/axiastudio/suite/resources/group.png")); itemDeleghe.setText(1, "com.axiastudio.suite.procedimenti.entities.Delega"); //itemDeleghe.setDisabled(!autenticato.getAmministratore()); QTreeWidgetItem itemPassword = new QTreeWidgetItem(itemAmministrazione); itemPassword.setText(0, "Cambio password"); itemPassword.setIcon(0, new QIcon("classpath:com/axiastudio/pypapi/ui/resources/key.png")); itemPassword.setText(1, "PASSWORD"); this.tree.activated.connect(this, "runTask()"); this.tree.setMinimumWidth(200); } private void runTask() { String formName = this.tree.currentItem().text(1); if (formName == null || formName.equals("")) { return; // item di raggruppamento } String mode = this.tree.currentItem().text(2); /* cambio password */ if( "PASSWORD".equals(formName) ){ CambiaPassword passDlg = new CambiaPassword(this); int exec = passDlg.exec(); } else if( "TITOLARIO".equals(formName) ){ FormTitolario titolario = new FormTitolario(); this.workspace.addSubWindow(titolario); int exec = titolario.exec(); } else if( "EMAIL".equals(formName) ){ FormMailboxList mailboxes = new FormMailboxList(); this.workspace.addSubWindow(mailboxes); int exec = mailboxes.exec(); } else if( "TIPIPRATICA".equals(formName) ){ FormTipoPratica tipipratica = new FormTipoPratica(); this.workspace.addSubWindow(tipipratica); int exec = tipipratica.exec(); } else if( "SCRIVANIA".equals(formName) ){ FormScrivania form = new FormScrivania(); this.workspace.addSubWindow(form); form.show(); } else { /* form registrata */ Window form=null; Class<? extends Window> formClass = (Class) Register.queryUtility(IForm.class, formName); String uiFile = (String) Register.queryUtility(IUIFile.class, formName); Class factory = (Class) Register.queryUtility(IFactory.class, formName); try { Constructor<? extends Window> constructor = formClass.getConstructor(new Class[]{String.class, Class.class, String.class}); try { form = constructor.newInstance(new Object[]{uiFile, factory, ""}); } catch (InstantiationException ex) { Logger.getLogger(Mdi.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(Mdi.class.getName()).log(Level.SEVERE, null, ex); } catch (IllegalArgumentException ex) { Logger.getLogger(Mdi.class.getName()).log(Level.SEVERE, null, ex); } catch (InvocationTargetException ex) { Logger.getLogger(Mdi.class.getName()).log(Level.SEVERE, null, ex); } } catch (NoSuchMethodException ex) { Logger.getLogger(Mdi.class.getName()).log(Level.SEVERE, null, ex); } catch (SecurityException ex) { Logger.getLogger(Mdi.class.getName()).log(Level.SEVERE, null, ex); } // A store with a new element Store store = null; if( "NEW".equals(mode) ){ store = new Store(new ArrayList<Object>()); try { Constructor<? extends Window> entityConstructor = factory.getConstructor(new Class[]{}); Object entity = entityConstructor.newInstance(new Object[]{}); store.add(entity); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } else if( mode.startsWith("NAMEDQUERY") ){ Utente autenticato = (Utente) Register.queryUtility(IUtente.class); String[] split = mode.split(":"); String namedQueryName = split[1]; Database db = (Database) Register.queryUtility(IDatabase.class); EntityManagerFactory emf = db.getEntityManagerFactory(); EntityManager em = emf.createEntityManager(); TypedQuery namedQuery = em.createNamedQuery(namedQueryName, factory); // TODO: aggiungere qualche controllo? for( Integer i=2; i<split.length; i++){ String parameters = split[i]; String[] split1 = parameters.split(","); String fieldName = split1[0]; String typeName = split1[1]; String stringValue = split1[2]; if( "Integer".equals(typeName) ){ Object value = Integer.parseInt(stringValue); namedQuery = namedQuery.setParameter(fieldName, value); } } List<?> resultList = namedQuery.getResultList(); store = new Store(resultList); } if( store != null ){ form.init(store); } else { form.init(); } this.workspace.addSubWindow(form); this.showForm(form); this.menuWindows.addAction(form.toString()); } } private void showForm(Window form) { if( this.workspace.subWindowList().size()>1 ){ form.show(); } else { form.showMaximized(); } } @Override public QMdiArea getWorkspace() { return workspace; } }