/******************************************************************************* * Copyright (c) 2012-2015 Codenvy, S.A. * 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 * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.ext.java.client.editor.outline; import elemental.dom.Element; import elemental.html.DivElement; import elemental.html.SpanElement; import org.eclipse.che.ide.api.texteditor.outline.CodeBlock; import org.eclipse.che.ide.ext.java.client.JavaCss; import org.eclipse.che.ide.ext.java.client.JavaResources; import org.eclipse.che.ide.ext.java.jdt.core.dom.Modifier; import org.eclipse.che.ide.ext.java.messages.BlockTypes; import org.eclipse.che.ide.ui.tree.NodeRenderer; import org.eclipse.che.ide.ui.tree.TreeNodeElement; import org.eclipse.che.ide.util.dom.Elements; import com.google.gwt.user.client.ui.UIObject; /** * @author <a href="mailto:evidolob@exoplatform.com">Evgen Vidolob</a> */ public class JavaNodeRenderer implements NodeRenderer<CodeBlock> { private JavaCss css; /** * */ public JavaNodeRenderer(JavaResources resources) { css = resources.css(); } /** {@inheritDoc} */ @Override public Element getNodeKeyTextContainer(SpanElement treeNodeLabel) { return (Element)treeNodeLabel.getChildNodes().item(1); } /** {@inheritDoc} */ @Override public SpanElement renderNodeContents(CodeBlock data) { if (data instanceof JavaCodeBlock) { SpanElement root = Elements.createSpanElement(css.outlineRoot()); DivElement icon = Elements.createDivElement(css.outlineIcon()); JavaCodeBlock block = (JavaCodeBlock)data; SpanElement label = Elements.createSpanElement(css.outlineLabel()); if (BlockTypes.PACKAGE.getType().equals(block.getType())) { Elements.addClassName(css.packageItem(), icon); } if (BlockTypes.IMPORTS.getType().equals(block.getType())) { Elements.addClassName(css.imports(), icon); } else if (BlockTypes.IMPORT.getType().equals(block.getType())) { Elements.addClassName(css.importItem(), icon); } else if (BlockTypes.CLASS.getType().equals(block.getType())) { Elements.addClassName(css.classItem(), icon); } else if (BlockTypes.INTERFACE.getType().equals(block.getType())) { Elements.addClassName(css.interfaceItem(), icon); } else if (BlockTypes.ENUM.getType().equals(block.getType())) { Elements.addClassName(css.enumItem(), icon); } else if (BlockTypes.ANNOTATION.getType().equals(block.getType())) { Elements.addClassName(css.annotationItem(), icon); } else if (BlockTypes.FIELD.getType().equals(block.getType())) { Elements.addClassName(getFieldClass(block.getModifiers()), icon); } else if (BlockTypes.METHOD.getType().equals(block.getType())) { Elements.addClassName(getMethodClass(block.getModifiers()), icon); } label.setTextContent(block.getName()); UIObject.ensureDebugId((com.google.gwt.dom.client.Element)label, "outline-codeblock-" + block.getName()); root.appendChild(icon); root.appendChild(label); if (block.getJavaType() != null) { SpanElement type = Elements.createSpanElement(css.fqnStyle()); type.setTextContent(" : " + block.getJavaType()); root.appendChild(type); } // CssUtils.setClassNameEnabled(label, css.disabled(), !data.isEnabled()); // TODO: replace with test case // assert root.getChildNodes().item(LABEL_NODE_INDEX) == label; return root; } else { throw new UnsupportedOperationException("This NodeRenderer support only JavaCodeBlock!"); } } /** * @param modifiers * @return */ private String getMethodClass(int modifiers) { if (Modifier.isPublic(modifiers)) return css.publicMethod(); else if (Modifier.isProtected(modifiers)) return css.protectedMethod(); else if (Modifier.isPrivate(modifiers)) return css.privateMethod(); else return css.defaultMethod(); } /** * @param modifiers * @return */ private String getFieldClass(int modifiers) { if (Modifier.isPublic(modifiers)) return css.publicField(); else if (Modifier.isProtected(modifiers)) return css.protectedField(); else if (Modifier.isPrivate(modifiers)) return css.privateField(); else return css.defaultField(); } /** {@inheritDoc} */ @Override public void updateNodeContents(TreeNodeElement<CodeBlock> treeNode) { //not used in Outline } }