Package wicketforge.psi.hierarchy

Source Code of wicketforge.psi.hierarchy.ClassWicketIdNewComponentItem

/*
* Copyright 2013 The WicketForge-Team
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package wicketforge.psi.hierarchy;

import com.intellij.navigation.ItemPresentation;
import com.intellij.psi.PsiAnonymousClass;
import com.intellij.psi.PsiCallExpression;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiExpression;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import wicketforge.Constants;
import wicketforge.util.WicketPsiUtil;

import javax.swing.*;

public final class ClassWicketIdNewComponentItem implements ItemPresentation {
    private final PsiCallExpression callExpression;
    private final PsiExpression wicketIdExpression;
    private final String wicketId;
    private final PsiClass baseClassToCreate;

    private ClassWicketIdNewComponentItem(@NotNull PsiCallExpression callExpression, @NotNull PsiExpression wicketIdExpression, @NotNull String wicketId, @NotNull PsiClass baseClassToCreate) {
        this.callExpression = callExpression;
        this.wicketIdExpression = wicketIdExpression;
        this.wicketId = wicketId;
        this.baseClassToCreate = baseClassToCreate;
    }

    @Nullable
    static ClassWicketIdNewComponentItem create(@NotNull PsiCallExpression callExpression) {
        PsiExpression wicketIdExpression = WicketPsiUtil.getWicketIdExpressionFromArguments(callExpression);
        if (wicketIdExpression == null) {
            return null;
        }
        String wicketId = WicketPsiUtil.getWicketIdFromExpression(wicketIdExpression);
        if (wicketId == null) {
            return null;
        }
        PsiClass classToBeCreated = WicketPsiUtil.getClassToBeCreated(callExpression);
        if (classToBeCreated instanceof PsiAnonymousClass) {
            classToBeCreated = PsiUtil.resolveClassInType(((PsiAnonymousClass) classToBeCreated).getBaseClassType());
        }
        if (classToBeCreated == null) {
            return null;
        }
        return new ClassWicketIdNewComponentItem(callExpression, wicketIdExpression, wicketId, classToBeCreated);
    }

    @NotNull
    public PsiCallExpression getCallExpression() {
        return callExpression;
    }

    @NotNull
    public PsiExpression getWicketIdExpression() {
        return wicketIdExpression;
    }

    @NotNull
    public String getWicketId() {
        return wicketId;
    }

    /**
     * @return  Class to be created (base class on anonymous creation)
     */
    @NotNull
    public PsiClass getBaseClassToCreate() {
        return baseClassToCreate;
    }

    @Override
    public String getPresentableText() {
        return wicketId;
    }

    @Override
    public String getLocationString() {
        return /*"new " + */getBaseClassToCreate().getName()/* + "(...)"*/;
    }

    @Nullable
    @Override
    public Icon getIcon(boolean unused) {
        return getIcon(baseClassToCreate);
    }

    private static Icon getIcon(@Nullable PsiClass classToCreate) {
        // simply name check should be enough
        while (classToCreate != null) {
            String name = classToCreate.getName();

            if ("Form".equals(name)) {
                return Constants.ICON_CLASS_FORM;
            }
            if ("AbstractChoice".equals(name)) {
                return Constants.ICON_CLASS_SELECT;
            }
            if ("CheckBox".equals(name)) {
                return Constants.ICON_CLASS_CHECKBOX;
            }
            if ("Radio".equals(name)) {
                return Constants.ICON_CLASS_RADIO;
            }
            if ("Image".equals(name) || "ContextImage".equals(name)) {
                return Constants.ICON_CLASS_RADIO;
            }
            if ("Label".equals(name) || "MultiLineLabel".equals(name) || "FormComponentLabel".equals(name)) {
                return Constants.ICON_CLASS_LABEL;
            }
            if ("AbstractLink".equals(name)) {
                return Constants.ICON_CLASS_LINK;
            }
            if ("Button".equals(name)) {
                return Constants.ICON_CLASS_BUTTON;
            }
            if ("TextArea".equals(name)) {
                return Constants.ICON_CLASS_TEXTAREA;
            }
            if ("AbstractTextComponent".equals(name)) {
                return Constants.ICON_CLASS_TEXTFIELD;
            }
            if ("AbstractRepeater".equals(name)) {
                return Constants.ICON_CLASS_REPEATER;
            }
            if ("Panel".equals(name)) {
                return Constants.ICON_CLASS_PANEL;
            }
            if ("Border".equals(name)) {
                return Constants.ICON_CLASS_BORDER;
            }
            if ("FormComponentPanel".equals(name)) {
                return Constants.ICON_CLASS_FORMCOMPONENTPANEL;
            }
            if ("FormComponent".equals(name)) {
                return Constants.ICON_CLASS_FORMCOMPONENT;
            }
            if ("WebMarkupContainer".equals(name)) {
                return Constants.ICON_CLASS_WEBMARKUPCONTAINER;
            }

            classToCreate = classToCreate.getSuperClass();
        }
        return Constants.ICON_CLASS_;
    }
}
TOP

Related Classes of wicketforge.psi.hierarchy.ClassWicketIdNewComponentItem

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.