/* * Copyright 2012 Red Hat, Inc. and/or its affiliates. * * 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 org.kie.workbench.common.screens.search.client; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.inject.Inject; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; import org.gwtbootstrap3.client.ui.Alert; import org.gwtbootstrap3.client.ui.Column; import org.gwtbootstrap3.client.ui.Form; import org.gwtbootstrap3.client.ui.FormGroup; import org.gwtbootstrap3.client.ui.PanelCollapse; import org.gwtbootstrap3.client.ui.PanelGroup; import org.gwtbootstrap3.client.ui.PanelHeader; import org.gwtbootstrap3.client.ui.TextBox; import org.gwtbootstrap3.client.ui.constants.AlertType; import org.gwtbootstrap3.client.ui.constants.ValidationState; import org.gwtbootstrap3.extras.typeahead.client.base.StringDataset; import org.gwtbootstrap3.extras.typeahead.client.ui.Typeahead; import org.kie.workbench.common.screens.search.client.resources.i18n.Constants; import org.kie.workbench.common.screens.search.client.widgets.SearchResultTable; import org.kie.workbench.common.screens.search.model.QueryMetadataPageRequest; import org.kie.workbench.common.services.shared.preferences.ApplicationPreferences; import org.uberfire.client.annotations.WorkbenchPartTitle; import org.uberfire.client.annotations.WorkbenchScreen; import org.uberfire.client.workbench.type.ClientResourceType; import org.uberfire.client.workbench.type.ClientTypeRegistry; import org.uberfire.ext.widgets.common.client.common.DatePicker; @Dependent @WorkbenchScreen(identifier = "FindForm") public class FindForm extends Composite { interface FindFormBinder extends UiBinder<Widget, FindForm> { } private static FindFormBinder uiBinder = GWT.create( FindFormBinder.class ); @Inject private ClientTypeRegistry clientTypeRegistry; @UiField SimplePanel errorPanel; @UiField FormGroup formGroup; @UiField Form form; @UiField TextBox sourceTextBox; @UiField TextBox createdByTextBox; @UiField TextBox descriptionByTextBox; @UiField Typeahead formatTypeahead; @UiField TextBox subjectTextBox; @UiField TextBox typeTextBox; @UiField TextBox lastModifiedByTextBox; @UiField TextBox externalLinkTextBox; @UiField TextBox checkinCommentTextBox; @UiField DatePicker createdAfter; @UiField DatePicker createdBefore; @UiField DatePicker lastModifiedAfter; @UiField DatePicker lastModifiedBefore; @UiField PanelGroup accordion; @UiField PanelHeader formAccordionHeader; @UiField PanelCollapse formAccordionCollapse; @UiField PanelHeader resultAccordionHeader; @UiField PanelCollapse resultAccordionCollapse; @UiField Column simplePanel; @PostConstruct public void init() { initWidget( uiBinder.createAndBindUi( this ) ); accordion.setId( DOM.createUniqueId() ); formAccordionHeader.setDataParent( accordion.getId() ); formAccordionHeader.setDataTargetWidget( formAccordionCollapse ); resultAccordionHeader.setDataParent( accordion.getId() ); resultAccordionHeader.setDataTargetWidget( resultAccordionCollapse ); createdAfter.setFormat( ApplicationPreferences.getDroolsDateFormat() ); createdBefore.setFormat( ApplicationPreferences.getDroolsDateFormat() ); lastModifiedAfter.setFormat( ApplicationPreferences.getDroolsDateFormat() ); lastModifiedBefore.setFormat( ApplicationPreferences.getDroolsDateFormat() ); formGroup.setStyleName( null ); formatTypeahead.setDatasets( new StringDataset( new ArrayList<String>() {{ for ( final ClientResourceType resourceType : clientTypeRegistry.getRegisteredTypes() ) { add( resourceType.getShortName() ); } }} ) ); } @UiHandler("clear") public void onClearClick( final ClickEvent e ) { form.reset(); } @UiHandler("search") public void onSearchClick( final ClickEvent e ) { errorPanel.clear(); formGroup.setValidationState( ValidationState.NONE ); final Map<String, Object> metadata = new HashMap<String, Object>(); if ( !sourceTextBox.getText().trim().isEmpty() ) { metadata.put( "dcore.source[0]", sourceTextBox.getText().trim() ); } if ( !createdByTextBox.getText().trim().isEmpty() ) { metadata.put( "createdBy", createdByTextBox.getText().trim() ); } if ( !descriptionByTextBox.getText().trim().isEmpty() ) { metadata.put( "dcore.description[0]", descriptionByTextBox.getText().trim() ); } if ( !formatTypeahead.getText().trim().isEmpty() ) { final String pattern = clientTypeRegistry.resolveWildcardPattern( formatTypeahead.getText().trim() ); metadata.put( "filename", pattern ); } if ( !subjectTextBox.getText().trim().isEmpty() ) { metadata.put( "dcore.subject[0]", subjectTextBox.getText().trim() ); } if ( !typeTextBox.getText().trim().isEmpty() ) { metadata.put( "dcore.type[0]", typeTextBox.getText().trim() ); } if ( !lastModifiedByTextBox.getText().trim().isEmpty() ) { metadata.put( "lastModifiedBy", lastModifiedByTextBox.getText().trim() ); } if ( !externalLinkTextBox.getText().trim().isEmpty() ) { metadata.put( "dcore.relation[0]", externalLinkTextBox.getText().trim() ); } if ( !checkinCommentTextBox.getText().trim().isEmpty() ) { metadata.put( "checkinComment", checkinCommentTextBox.getText().trim() ); } boolean hasSomeDateValue = false; if ( createdAfter.getValue() != null ) { hasSomeDateValue = true; } if ( createdBefore.getValue() != null ) { hasSomeDateValue = true; } if ( lastModifiedAfter.getValue() != null ) { hasSomeDateValue = true; } if ( lastModifiedBefore.getValue() != null ) { hasSomeDateValue = true; } if ( metadata.size() == 0 && !hasSomeDateValue ) { formGroup.setValidationState( ValidationState.ERROR ); Alert alert = new Alert( Constants.INSTANCE.AtLeastOneFieldMustBeSet(), AlertType.DANGER ); alert.setVisible( true ); alert.setDismissable( true ); errorPanel.add( alert ); return; } final SearchResultTable queryTable = new SearchResultTable( new QueryMetadataPageRequest( metadata, createdAfter.getValue(), createdBefore.getValue(), lastModifiedAfter.getValue(), lastModifiedBefore.getValue(), 0, null ) ); simplePanel.clear(); simplePanel.add( queryTable ); formAccordionCollapse.setIn( false ); resultAccordionCollapse.setIn( true ); } @WorkbenchPartTitle public String getTitle() { return Constants.INSTANCE.AssetSearch(); } }