package com.topsun.posclient.common.ui.menu;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.ViewSite;
import com.topsun.posclient.common.POSClientApp;
import com.topsun.posclient.common.ProjectUtil;
import com.topsun.posclient.common.service.IBaseService;
import com.topsun.posclient.common.service.impl.BaseServiceImpl;
import com.topsun.posclient.common.ui.model.TopSunMenuModel;
import com.topsun.posclient.common.ui.model.TopSunTreeModel;
import com.topsun.posclient.common.ui.utils.ImageUtils;
import com.topsun.posclient.common.ui.utils.TopSunMenuTreeComparator;
import com.topsun.posclient.datamodel.User;
import com.topsun.posclient.widget.pshelf.PShelf;
import com.topsun.posclient.widget.pshelf.PShelfItem;
/**
*
* @author yujie3
*
*/
public class MenuTreeManagerFacede {
private static MenuTreeManagerFacede facede = new MenuTreeManagerFacede();
private static List<TopSunMenuModel> menuList = new ArrayList<TopSunMenuModel>();
private static List<TopSunTreeModel> treeList = new ArrayList<TopSunTreeModel>();
private MenuTreeManagerFacede() {
}
static IWorkbenchWindow window = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow();
static int instanceNum;
private static void checkSecondaryId(String viewID) {
IWorkbenchPage page = window.getActivePage();
IViewReference vr = page.findViewReference(viewID,
Integer.toString(instanceNum));
if (vr != null) {
instanceNum++;
checkSecondaryId(viewID);
} else {
return;
}
}
public static MenuTreeManagerFacede getInstance() {
if (facede == null) {
facede = new MenuTreeManagerFacede();
return facede;
}
return facede;
}
private TopSunTreeModel findTree(String treeName) {
for (TopSunTreeModel tree : treeList) {
if (treeName.equals(tree.getTreeName())) {
return tree;
}
}
return null;
}
private TopSunMenuModel findMenu(String menuID) {
for (TopSunMenuModel menu : menuList) {
if (menuID.equals(menu.getMenuID())) {
return menu;
}
}
return null;
};
private void createTree(Composite composite, final TopSunMenuModel menu) {
loadTreeExtension(menu);
TreeViewer treeViewer = new TreeViewer(composite);
Tree tree = treeViewer.getTree();
tree.setLayoutData(new GridData(GridData.FILL_BOTH));
treeViewer.setLabelProvider(new MenuTreeLabelProvider());
treeViewer.setContentProvider(new MenuTreeContentProvider());
TopSunMenuModel t_Menu = findMenu(menu.getMenuID());
List<TopSunTreeModel> topSunTrees = t_Menu.getTrees();
TopSunMenuTreeComparator comparator = new TopSunMenuTreeComparator();
Collections.sort(topSunTrees, comparator);
treeViewer.setInput(topSunTrees);
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
updateStatusline(event);
}
});
treeViewer.addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
ISelection iSelection = event.getSelection();
if (iSelection instanceof TreeSelection) {
TreeSelection selection = (TreeSelection) iSelection;
Object obj = selection.getFirstElement();
if (obj instanceof TopSunTreeModel) {
TopSunTreeModel selectionTree = (TopSunTreeModel) obj;
TopSunTreeModel topsunTree = findTree(selectionTree
.getTreeName());
String viewId = topsunTree.getViewid();
checkSecondaryId(viewId);
if (window != null) {
try {
IViewPart part = window.getActivePage()
.showView(viewId, Integer.toString(0),
IWorkbenchPage.VIEW_ACTIVATE);
instanceNum++;
} catch (PartInitException e) {
MessageDialog.openError(window.getShell(),
"Error",
"Error opening view:" + e.getMessage());
}
}
}
}
IBaseService commonService = new BaseServiceImpl();
User loginUser = POSClientApp.get().getLoginUser();
String deptName = loginUser.getDeptName();
String userName = loginUser.getUserName();
ViewSite viewSite = (ViewSite) window.getPartService()
.getActivePart().getSite();
IStatusLineManager statusManager = viewSite.getActionBars()
.getStatusLineManager();
String luts = "";
String lastUpdateTimeStr = POSClientApp.get().getSysConfig().getLastUpdateTime();
if(null != lastUpdateTimeStr && lastUpdateTimeStr.length() > 0){
long lastUpdateTime = Long.valueOf(lastUpdateTimeStr);
luts = ProjectUtil.getDateString(new Date(lastUpdateTime));
}
statusManager.setMessage("姓名:" + userName + " 店铺:"
+ POSClientApp.get().getSysConfig().getOwnerShop()
+ " 登录时间:" + Calendar.getInstance().getTime()
+ " 最后更新:"
+ luts);
}
});
}
protected void updateStatusline(SelectionChangedEvent event) {
}
public void loadTreeExtension(TopSunMenuModel menu) {
IExtension[] extensions = Platform.getExtensionRegistry()
.getExtensionPoint("com.topsun.tree").getExtensions();
for (IExtension iExtension : extensions) {
IConfigurationElement[] configurationElement = iExtension
.getConfigurationElements();
for (IConfigurationElement iConfigurationElement : configurationElement) {
String pluginId = iExtension.getNamespace();
String menuId = iConfigurationElement.getAttribute("menuid");
String treeName = iConfigurationElement.getAttribute("name");
String treeid = iConfigurationElement.getAttribute("treeid");
String viewid = iConfigurationElement.getAttribute("viewid");
String index = iConfigurationElement.getAttribute("index");
String icon = iConfigurationElement.getAttribute("icons");
if (menu.getMenuID().equals(menuId)) {
TopSunTreeModel sunTree = new TopSunTreeModel(menu);
sunTree.setTreeId(treeid);
sunTree.setTreeName(treeName);
sunTree.setViewid(viewid);
sunTree.setPluginId(pluginId);
sunTree.setIcon(icon == null ? "" : icon);
sunTree.setIndex(index == null ? "" : index);
treeList.add(sunTree);
}
}
}
}
public void initMenu(PShelf parent) {
for (TopSunMenuModel menuModel : menuList) {
PShelfItem item = new PShelfItem(parent, SWT.NONE);
item.setText(" " + menuModel.getMenuName());
Composite compsite = item.getBody();
Color color = PlatformUI.getWorkbench().getDisplay()
.getSystemColor(SWT.COLOR_WHITE);
item.setImage(ImageUtils.createImage(menuModel.getPluginID(),
menuModel.getIcon()));
compsite.setBackground(color);
GridLayout gridLayout = new GridLayout(1, false);
gridLayout.marginBottom = 0;
gridLayout.marginHeight = 0;
gridLayout.marginLeft = 0;
gridLayout.marginRight = 0;
gridLayout.marginTop = 0;
gridLayout.marginWidth = 0;
compsite.setLayout(gridLayout);
// Create Tree Viewer
createTree(compsite, menuModel);
}
}
public void loadMenuExtension() {
IExtension[] extensions = Platform.getExtensionRegistry()
.getExtensionPoint("com.topsun.menu").getExtensions();
for (IExtension iExtension : extensions) {
IConfigurationElement[] configurationElement = iExtension
.getConfigurationElements();
for (IConfigurationElement iConfigurationElement : configurationElement) {
String meunName = iConfigurationElement.getAttribute("name");
String index = iConfigurationElement.getAttribute("index");
String menuid = iConfigurationElement.getAttribute("menuid");
String icon = iConfigurationElement.getAttribute("icon");
String pluginId = iExtension.getNamespace();
TopSunMenuModel menu = new TopSunMenuModel();
menu.setMenuID(menuid);
menu.setMenuName(meunName);
menu.setIcon(icon == null ? "" : icon);
menu.setIndex(index == null ? "" : index);
menu.setPluginID(pluginId);
menuList.add(menu);
}
}
TopSunMenuTreeComparator comparator = new TopSunMenuTreeComparator();
Collections.sort(menuList, comparator);
}
}