package ro.nextreports.server.web.analysis;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
import ro.nextreports.server.etl.OrientDbUtils;
import ro.nextreports.server.etl.OrientDbUtils.ClassMetadata;
import ro.nextreports.server.service.AnalysisService;
import ro.nextreports.server.service.StorageService;
import ro.nextreports.server.util.AnalysisUtil;
import ro.nextreports.server.web.common.form.FormContentPanel;
import ro.nextreports.server.web.common.form.FormPanel;
import ro.nextreports.server.web.security.SecurityUtil;
public class AddAnalysisPanel extends FormContentPanel {
private static final long serialVersionUID = 1L;
@SpringBean
private StorageService storageService;
@SpringBean
private AnalysisService analysisService;
private String selectedTable;
private static final Logger LOG = LoggerFactory.getLogger(AddAnalysisPanel.class);
public AddAnalysisPanel() {
super(FormPanel.CONTENT_ID);
DropDownChoice<String> selectedTable = new DropDownChoice<String>("tableChoice", new PropertyModel<String>(this, "selectedTable"), new TablesModel());
selectedTable.setOutputMarkupPlaceholderTag(true);
selectedTable.setNullValid(false);
selectedTable.setRequired(true);
selectedTable.setLabel(new StringResourceModel("Analysis.source", null));
add(selectedTable);
}
public String getSelectedTable() {
return selectedTable;
}
private class TablesModel extends LoadableDetachableModel<List<String>> {
private static final long serialVersionUID = 1L;
@Override
protected List<String> load() {
ODatabaseDocumentTx db = null;
try {
String prefix = SecurityUtil.getLoggedUsername() + "-";
try {
db = new ODatabaseDocumentTx(analysisService.getDatabasePath(), false).open("admin", "admin");
} catch (Throwable t) {
// critical case
t.printStackTrace();
LOG.error(t.getMessage(), t);
return new ArrayList<String>();
}
List<ClassMetadata> result = OrientDbUtils.getDatabaseClasses(db, prefix);
List<String> names = new ArrayList<String>();
for (ClassMetadata c : result) {
if (!c.getName().contains(AnalysisUtil.FREEZE_MARKUP)) {
names.add(c.getName().substring(prefix.length()));
}
}
return names;
} finally {
if (db != null) {
db.close();
}
}
}
}
}