/***************************************************************** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.cayenne.modeler.dialog.query; import org.apache.cayenne.configuration.DataChannelDescriptor; import org.apache.cayenne.configuration.event.QueryEvent; import org.apache.cayenne.dbsync.naming.NameBuilder; import org.apache.cayenne.map.DataMap; import org.apache.cayenne.map.QueryDescriptor; import org.apache.cayenne.map.event.MapEvent; import org.apache.cayenne.modeler.ProjectController; import org.apache.cayenne.modeler.event.QueryDisplayEvent; import org.apache.cayenne.modeler.undo.CreateQueryUndoableEdit; import org.apache.cayenne.modeler.util.CayenneController; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class QueryType extends CayenneController{ protected ProjectController mediator; protected DataMap dataMap; protected DataChannelDescriptor domain; protected QueryTypeView view; protected String type; public QueryType(ProjectController mediator, DataMap root) { super(mediator); view = new QueryTypeView(); initController(); // by default use object query... this.type = QueryDescriptor.SELECT_QUERY; this.mediator = mediator; this.dataMap = mediator.getCurrentDataMap(); this.domain = (DataChannelDescriptor)mediator.getProject().getRootNode(); } @Override public Component getView() { return view; } private void initController() { view.getCancelButton().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { view.dispose(); } }); view.getSaveButton().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { createQuery(); } }); view.getObjectSelect().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setObjectSelectQuery(); } }); view.getSqlSelect().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setRawSQLQuery(); } }); view.getProcedureSelect().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setProcedureQuery(); } }); view.getEjbqlSelect().addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setEjbqlQuery(); } }); } public void startupAction() { view.pack(); view.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); view.setModal(true); makeCloseableOnEscape(); centerView(); view.setVisible(true); } /** * Action method that creates a query for the specified query type. */ public void createQuery() { String queryType = getSelectedQuery(); // update query... QueryDescriptor query = QueryDescriptor.descriptor(queryType); query.setName(NameBuilder.builder(query, dataMap).name()); query.setDataMap(dataMap); dataMap.addQueryDescriptor(query); mediator.getApplication().getUndoManager().addEdit( new CreateQueryUndoableEdit(domain, dataMap, query)); // notify listeners fireQueryEvent(this, mediator,dataMap, query); view.dispose(); } /** * Fires events when a query was added */ public static void fireQueryEvent(Object src, ProjectController mediator, DataMap dataMap, QueryDescriptor query) { mediator.fireQueryEvent(new QueryEvent(src, query, MapEvent.ADD, dataMap)); mediator.fireQueryDisplayEvent(new QueryDisplayEvent(src, query, dataMap, (DataChannelDescriptor)mediator.getProject().getRootNode())); } public String getSelectedQuery() { return type; } public void setObjectSelectQuery() { this.type = QueryDescriptor.SELECT_QUERY; } public void setRawSQLQuery() { this.type = QueryDescriptor.SQL_TEMPLATE; } public void setProcedureQuery() { this.type = QueryDescriptor.PROCEDURE_QUERY; } public void setEjbqlQuery() { this.type = QueryDescriptor.EJBQL_QUERY; } }