/** * */ 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; } }