/******************************************************************************* * Copyright (c) 2012-2017 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.projectimport.wizard.mainpage; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.SpanElement; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.google.gwt.user.client.ui.DockLayoutPanel; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import org.eclipse.che.api.project.shared.dto.ProjectImporterDescriptor; import org.eclipse.che.ide.Resources; import org.eclipse.che.ide.ui.list.CategoriesList; import org.eclipse.che.ide.ui.list.Category; import org.eclipse.che.ide.ui.list.CategoryRenderer; import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /** * UI implementation for {@link MainPageView}. * * @author Ann Shumilova */ public class MainPageViewImpl implements MainPageView { private static MainPageViewImplUiBinder uiBinder = GWT.create(MainPageViewImplUiBinder.class); private final DockLayoutPanel rootElement; private final CategoryRenderer<ProjectImporterDescriptor> projectImporterRenderer = new CategoryRenderer<ProjectImporterDescriptor>() { @Override public void renderElement(Element element, ProjectImporterDescriptor data) { element.setInnerText(data.getId().toUpperCase()); } @Override public SpanElement renderCategory(Category<ProjectImporterDescriptor> category) { SpanElement textElement = Document.get().createSpanElement(); textElement.setClassName(resources.defaultCategoriesListCss().headerText()); textElement.setInnerText(category.getTitle()); return textElement; } }; @UiField Style style; @UiField SimplePanel importerPanel; @UiField SimplePanel categoriesPanel; @UiField HTMLPanel descriptionArea; @UiField(provided = true) Resources resources; private CategoriesList list; private ActionDelegate delegate; private final Category.CategoryEventDelegate<ProjectImporterDescriptor> projectImporterDelegate = new Category.CategoryEventDelegate<ProjectImporterDescriptor>() { @Override public void onListItemClicked(Element listItemBase, ProjectImporterDescriptor itemData) { delegate.projectImporterSelected(itemData); } }; @Inject public MainPageViewImpl(Resources resources) { this.resources = resources; rootElement = uiBinder.createAndBindUi(this); } @Override public void reset() { categoriesPanel.clear(); list = new CategoriesList(resources); categoriesPanel.add(list); } @Override public void setDelegate(ActionDelegate delegate) { this.delegate = delegate; } @Override public Widget asWidget() { return rootElement; } /** {@inheritDoc} */ @Override public void setImporters(Map<String, Set<ProjectImporterDescriptor>> categories) { List<Category<?>> categoriesList = new ArrayList<>(); for (Entry<String, Set<ProjectImporterDescriptor>> entry : categories.entrySet()) { categoriesList.add(new Category<>(entry.getKey(), projectImporterRenderer, entry.getValue(), projectImporterDelegate)); } list.render(categoriesList, true); } @Override public AcceptsOneWidget getImporterPanel() { return importerPanel; } /** {@inheritDoc} */ @Override public void selectImporter(ProjectImporterDescriptor importer) { list.selectElement(importer); } @Override public void setImporterDescription(@NotNull String text) { descriptionArea.getElement().setInnerText(text); } interface MainPageViewImplUiBinder extends UiBinder<DockLayoutPanel, MainPageViewImpl> { } interface Style extends CssResource { String mainPanel(); String leftPart(); String rightPart(); String categories(); } }