/**
* (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jabylon.rest.ui.wicket.panels;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.ExecutionException;
import javax.inject.Inject;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.jabylon.properties.PropertyFile;
import org.jabylon.properties.PropertyFileDescriptor;
import org.jabylon.resources.persistence.PropertyPersistenceService;
import org.jabylon.rest.ui.model.PropertyPair;
import org.jabylon.rest.ui.tools.PropertyEditorTool;
import org.jabylon.rest.ui.tools.PropertyToolTab;
import org.jabylon.rest.ui.wicket.BasicResolvablePanel;
import org.jabylon.rest.ui.wicket.components.BootstrapAjaxTabbedPanel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* TODO short description for PropertiesEditorToolbar.
* <p>
* Long description for PropertiesEditorToolbar.
*
* @author utzig
*/
public class PropertiesEditorToolbar extends BasicResolvablePanel<PropertyFileDescriptor>
{
/** field <code>serialVersionUID</code> */
private static final long serialVersionUID = 1L;
private String currentKey;
@Inject
private List<PropertyEditorTool> tools;
private PropertyPersistenceService persistenceService;
private BootstrapAjaxTabbedPanel<PropertyToolTab> tabContainer;
private List<PropertyToolTab> extensions;
private static final Logger logger = LoggerFactory.getLogger(PropertiesEditorToolbar.class);
public PropertiesEditorToolbar(String id, IModel<PropertyFileDescriptor> model, PageParameters pageParameters) {
super(id, model, pageParameters);
}
@Override
protected void construct() {
extensions = createExtensions();
tabContainer = new BootstrapAjaxTabbedPanel<PropertyToolTab>("tabs", extensions,"propertyTools/activeTab");
add(tabContainer);
}
private List<PropertyToolTab> createExtensions() {
List<PropertyToolTab> extensions = new ArrayList<PropertyToolTab>(tools.size());
Collections.sort(tools,new Comparator<PropertyEditorTool>() {
@Override
public int compare(PropertyEditorTool o1, PropertyEditorTool o2) {
return o1.getPrecedence() - o2.getPrecedence();
}
});
for (PropertyEditorTool tool : tools) {
extensions.add(new PropertyToolTab(tool));
}
return extensions;
}
public void setKey(String key)
{
if(key!=null && !key.isEmpty() && !key.equals(currentKey))
{
PropertyFileDescriptor translation = getModel().getObject();
PropertyFile properties;
try {
properties = persistenceService.loadProperties(translation);
properties.getProperty(key);
PropertyFileDescriptor master = translation.getMaster();
PropertyFile masterFile = persistenceService.loadProperties(master);
PropertyPair pair = new PropertyPair(masterFile.getProperty(key),properties.getProperty(key), translation.getVariant(),translation.cdoID());
// int selected = tabContainer.getSelectedTab();
for (PropertyToolTab tool : extensions) {
tool.setModel(Model.of(pair));
}
} catch (ExecutionException e) {
logger.error("Failed to load property file",e);
}
}
this.currentKey = key;
}
}