/**
*
*/
package com.topsun.posclient.application;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import org.eclipse.jface.action.IContributionItem;
public class ContributionItemService implements IContributionItemService {
private List<ContributionItemEntry> entryList = new ArrayList<ContributionItemEntry>();
private boolean loaded = false;
private void load() {
if (!loaded) {
synchronized (this) {
if (!loaded) {
ContributionItemDescriptor[] descriptors = ContributionItemsRegistry.getInstance().getDescriptors();
entryList = new ArrayList<ContributionItemEntry>(descriptors.length);
for (ContributionItemDescriptor itemDescriptor : descriptors) {
// if (!DesktopTemplateConfig.INSTANCE.applicationIsEnabled(itemDescriptor.getApplicationId())) {
// continue;
// }
// if (!DesktopTemplateConfig.INSTANCE.controlIsVisible(itemDescriptor.getId())) {
// continue;
// }
// if (!DesktopTemplateConfig.INSTANCE.actionItemIsEnabled(itemDescriptor.getId(), itemDescriptor.isDefaultItem())) {
// continue;
// }
entryList.add(new ContributionItemEntry(itemDescriptor.getCategory(), itemDescriptor.createItem(), itemDescriptor.getApplicationId()));
}
loaded = true;
}
}
}
}
public void insertHead(String category, IContributionItem item) {
if (category == null || item == null) {
return;
}
load();
entryList.add(0, new ContributionItemEntry(category, item, null));
}
public void insertTail(String category, IContributionItem item) {
if (category == null || item == null) {
return;
}
load();
entryList.add(entryList.size(), new ContributionItemEntry(category, item, null));
}
public void insertBefore(String category, String itemId,
IContributionItem item) {
if (category == null || itemId == null || item == null) {
return;
}
load();
int index = getIndex(category, itemId);
if (index < 0) {
insertTail(category, item);
} else {
entryList.add(index, new ContributionItemEntry(category, item, null));
}
}
public void insertAfter(String category, String itemId,
IContributionItem item) {
if (category == null || itemId == null || item == null) {
return;
}
load();
int index = getIndex(category, itemId);
if (index < 0) {
insertTail(category, item);
} else {
entryList.add(index + 1, new ContributionItemEntry(category, item, null));
}
}
public void removeItem(String category, String itemId) {
if (category == null || itemId == null) {
return;
}
load();
int index = getIndex(category, itemId);
if (index < 0) {
return;
} else {
entryList.remove(index).item.dispose();
}
}
public IContributionItem getItem(String category, String itemId) {
if (category == null || itemId == null) {
return null;
}
load();
int index = getIndex(category, itemId);
if (index < 0) {
return null;
} else {
return entryList.get(index).item;
}
}
public IContributionItem[] getItems(String category) {
if (category == null) {
return new IContributionItem[0];
}
load();
List<IContributionItem> list = new ArrayList<IContributionItem>();
for (ContributionItemEntry entry : entryList) {
if (entry.category.equals(category)) {
list.add(entry.item);
}
}
return list.toArray(new IContributionItem[list.size()]);
}
public IContributionItem[] getItems() {
load();
List<IContributionItem> list = new ArrayList<IContributionItem>();
for (ContributionItemEntry entry : entryList) {
list.add(entry.item);
}
return list.toArray(new IContributionItem[list.size()]);
}
public String getCategory(IContributionItem item) {
if (item == null) {
return null;
}
load();
for (int i = 0; i < entryList.size(); i++) {
ContributionItemEntry entry = entryList.get(i);
if (entry.item.equals(item)) {
return entry.category;
}
}
return null;
}
private int getIndex(String category, String itemId) {
for (int i = 0; i < entryList.size(); i++) {
ContributionItemEntry entry = entryList.get(i);
if (entry.category.equals(category) && entry.item.getId().equals(itemId)) {
return i;
}
}
return -1;
}
class ContributionItemEntry {
String category;
IContributionItem item;
String applicationId;
ContributionItemEntry(String category, IContributionItem item,
String applicationId) {
this.category = (category == null ? "other" : category);
this.applicationId = applicationId;
this.item = item;
}
}
public String[] getCategorys() {
LinkedHashMap<String, String> categorys = new LinkedHashMap<String, String>();
load();
for (int i = 0; i < entryList.size(); i++) {
ContributionItemEntry entry = entryList.get(i);
categorys.put(entry.category, entry.category);
}
return categorys.keySet().toArray(new String[categorys.size()]);
}
public String getApplicationId(IContributionItem item) {
if (item == null) {
return null;
}
load();
for (int i = 0; i < entryList.size(); i++) {
ContributionItemEntry entry = entryList.get(i);
if (entry.item.equals(item)) {
return entry.applicationId;
}
}
return null;
}
}