package org.orienteer.core.component.visualizer;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import com.orientechnologies.orient.core.metadata.schema.OType;
import org.apache.wicket.markup.html.basic.MultiLineLabel;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.util.lang.Args;
import org.orienteer.core.component.property.LinksPropertyDataTablePanel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Registry for {@link IVisualizer}s
*/
public class UIVisualizersRegistry
{
private Table<OType, String, IVisualizer> registryTable = HashBasedTable.create();
public UIVisualizersRegistry()
{
registerUIComponentFactory(DefaultVisualizer.INSTANCE);
registerUIComponentFactory(new SimpleVisualizer("textarea", MultiLineLabel.class, TextArea.class, OType.STRING));
registerUIComponentFactory(new SimpleVisualizer("table", true, LinksPropertyDataTablePanel.class,
LinksPropertyDataTablePanel.class,
OType.LINKLIST,
OType.LINKSET,
OType.LINKBAG));
registerUIComponentFactory(new ListboxVisualizer());
registerUIComponentFactory(new PasswordVisualizer());
registerUIComponentFactory(new HTMLVisualizer());
registerUIComponentFactory(new UrlLinkVisualizer());
registerUIComponentFactory(new MarkDownVisualizer());
registerUIComponentFactory(new LocalizationVisualizer());
registerUIComponentFactory(new ImageVisualizer());
registerUIComponentFactory(new TagsVisualizer());
}
public Table<OType, String, IVisualizer> getRegistryTable()
{
return registryTable;
}
public void registerUIComponentFactory(IVisualizer visualizer)
{
for(OType oType : visualizer.getSupportedTypes())
{
registryTable.put(oType, visualizer.getName(), visualizer);
}
}
public IVisualizer getComponentFactory(OType oType, String componentName)
{
Args.notNull(oType, "oType");
Args.notNull(componentName, "componentName");
return registryTable.get(oType, componentName);
}
public List<String> getComponentsOptions(OType oType)
{
List<String> ret = new ArrayList<String>();
if(oType!=null)
{
ret.addAll(registryTable.row(oType).keySet());
}
else
{
ret.addAll(registryTable.columnKeySet());
}
Collections.sort(ret);
return ret;
}
}