/*
* Copyright (C) 2013 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 Afffero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axiastudio.suite.procedimenti.forms;
import com.axiastudio.pypapi.Register;
import com.axiastudio.pypapi.db.Controller;
import com.axiastudio.pypapi.db.Database;
import com.axiastudio.pypapi.db.IDatabase;
import com.axiastudio.pypapi.db.Store;
import com.axiastudio.pypapi.ui.Dialog;
import com.axiastudio.pypapi.ui.widgets.PyPaPiComboBox;
import com.axiastudio.suite.AdminConsole;
import com.axiastudio.suite.procedimenti.entities.CodiceCarica;
import com.axiastudio.suite.procedimenti.entities.FaseProcedimento;
import com.axiastudio.suite.procedimenti.entities.Procedimento;
import com.sun.deploy.util.StringUtils;
import com.trolltech.qt.core.QModelIndex;
import com.trolltech.qt.gui.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
*
* @author AXIA Studio (http://www.axiastudio.com)
*/
public class FormFaseProcedimento extends Dialog {
private QListWidget caricheAbilitate;
private QListWidget caricheDisponibili;
public FormFaseProcedimento(String uiFile, Class entityClass) {
this(uiFile, entityClass, "");
}
public FormFaseProcedimento(String uiFile, Class entityClass, String title) {
super(uiFile, entityClass, title);
QPushButton test = (QPushButton) this.findChild(QPushButton.class, "pushButton_console");
test.clicked.connect(this, "openConsole()");
this.storeInitialized.connect(this, "storeConfermataRifiutata()");
QToolButton aggiungiCarica = (QToolButton) this.findChild(QToolButton.class, "aggiungiCarica");
aggiungiCarica.setIcon(new QIcon("classpath:com/axiastudio/pypapi/ui//resources/toolbar/resultset_previous.png"));
aggiungiCarica.clicked.connect(this, "aggiungiCarica()");
QToolButton rimuoviCarica = (QToolButton) this.findChild(QToolButton.class, "rimuoviCarica");
rimuoviCarica.setIcon(new QIcon("classpath:com/axiastudio/pypapi/ui/resources/toolbar/resultset_next.png"));
rimuoviCarica.clicked.connect(this, "rimuoviCarica()");
caricheDisponibili = (QListWidget) this.findChild(QListWidget.class, "caricheDisponibili");
caricheAbilitate = (QListWidget) this.findChild(QListWidget.class, "caricheAbilitate");
this.storeInitialized.connect(this, "inizializzaCariche()");
}
private void inizializzaCariche() {
FaseProcedimento faseProcedimento = (FaseProcedimento) this.getContext().getCurrentEntity();
for( CodiceCarica codiceCarica: CodiceCarica.values() ){
QListWidgetItem item = new QListWidgetItem();
item.setText(codiceCarica.name());
caricheDisponibili.addItem(item);
}
if( faseProcedimento.getCariche() != null ){
for( String token: faseProcedimento.getCariche().split(",") ){
CodiceCarica codiceCarica = CodiceCarica.valueOf(token);
QListWidgetItem item = new QListWidgetItem();
item.setText(codiceCarica.name());
caricheAbilitate.addItem(item);
}
}
}
/*
* Uno store contenente solo le fasi del procedimento
*/
public void storeConfermataRifiutata(){
FaseProcedimento fp = (FaseProcedimento) this.getContext().getCurrentEntity();
Store store = new Store(fp.getProcedimento().getFaseProcedimentoCollection());
PyPaPiComboBox confermata = (PyPaPiComboBox) this.findChild(PyPaPiComboBox.class, "comboBox_confermata");
confermata.setLookupStore(store);
this.getColumn("Confermata").setLookupStore(store);
confermata.select(fp.getConfermata());
PyPaPiComboBox rifiutata = (PyPaPiComboBox) this.findChild(PyPaPiComboBox.class, "comboBox_rifiutata");
rifiutata.setLookupStore(store);
this.getColumn("Rifiutata").setLookupStore(store);
rifiutata.select(fp.getRifiutata());
}
private void openConsole(){
String entityName = ((QLineEdit) this.findChild(QLineEdit.class, "lineEdit_entita")).text();
String entityId = ((QLineEdit) this.findChild(QLineEdit.class, "lineEdit_id")).text();
Long id = Long.parseLong(entityId);
Database db = (Database) Register.queryUtility(IDatabase.class);
Class<?> klass=null;
try {
klass = Class.forName(entityName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Controller controller = db.createController(klass);
Object obj = controller.get(id);
FaseProcedimento faseProcedimento = (FaseProcedimento) this.getContext().getCurrentEntity();
Procedimento procedimento = faseProcedimento.getProcedimento();
// Apertura della console
AdminConsole console = new AdminConsole(this, obj);
console.show();
}
private void aggiungiCarica(){
FaseProcedimento faseProcedimento = (FaseProcedimento) this.getContext().getCurrentEntity();
String cariche = faseProcedimento.getCariche();
if( cariche == null ){
cariche = "";
}
QModelIndex index = caricheDisponibili.currentIndex();
QListWidgetItem item = caricheDisponibili.item(index.row());
String testoCarica = item.text();
if( !Arrays.asList(cariche.split(",")).contains(testoCarica) ){
QListWidgetItem newItem = new QListWidgetItem();
newItem.setText(testoCarica);
caricheAbilitate.addItem(newItem);
}
aggiornaCariche();
}
private void rimuoviCarica(){
QModelIndex index = caricheAbilitate.currentIndex();
QListWidgetItem item = caricheAbilitate.takeItem(index.row());
caricheAbilitate.removeItemWidget(item);
aggiornaCariche();
}
private void aggiornaCariche(){
List<String> listCariche = new ArrayList<String>();
for( Integer i=0; i<caricheAbilitate.count(); i++ ){
QListWidgetItem item = caricheAbilitate.item(i);
listCariche.add(item.text());
}
String cariche = StringUtils.join(listCariche, ",");
FaseProcedimento faseProcedimento = (FaseProcedimento) this.getContext().getCurrentEntity();
faseProcedimento.setCariche(cariche);
this.getContext().getDirty();
}
}