Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
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.editor;
 
 import java.util.Map;
 
 
 import  org.apache.cayenne.map.event.QueryEvent;
 import  org.apache.cayenne.query.Query;
 import  org.apache.cayenne.query.QueryCacheStrategy;
 import  org.apache.cayenne.reflect.PropertyUtils;
 import  org.apache.cayenne.util.Util;
 import  org.apache.cayenne.validation.ValidationException;
A panel that supports editing the properties of a GenericSelectQuery.
 
 public abstract class SelectPropertiesPanel extends JPanel {
 
     private static Log logObj = LogFactory.getLog(SelectPropertiesPanel.class);
 
     private static final Integer ZERO = new Integer(0);
 
     private static final String NO_CACHE_LABEL = "No Result Caching";
     private static final String LOCAL_CACHE_LABEL = "Local Cache (per ObjectContext)";
     private static final String SHARED_CACHE_LABEL = "Shared Cache";
 
     protected static final Object[] CACHE_POLICIES = new Object[] {
             QueryCacheStrategy.NO_CACHE, QueryCacheStrategy.LOCAL_CACHE,
             QueryCacheStrategy.SHARED_CACHE
     };
 
     private static final Map<QueryCacheStrategy, StringcachePolicyLabels = new TreeMap<QueryCacheStrategy, String>();
 
     static {
         .put(QueryCacheStrategy.NO_CACHE, );
         .put(QueryCacheStrategy.LOCAL_CACHE, );
         .put(QueryCacheStrategy.SHARED_CACHE, );
     }
 
     protected TextAdapter fetchOffset;
     protected TextAdapter fetchLimit;
     protected TextAdapter pageSize;
     protected JComboBox cacheStrategy;
     protected TextAdapter cacheGroups;
     protected JComponent cacheGroupsLabel;
 
     protected ProjectController mediator;
 
     public SelectPropertiesPanel(ProjectController mediator) {
         this. = mediator;
         initView();
         initController();
     }
 
     protected void initView() {
          = new TextAdapter(new JTextField(7)) {
 
             protected void updateModel(String text) {
                 setFetchOffset(text);
             }
         };
 
         = new TextAdapter(new JTextField(7)) {
            protected void updateModel(String text) {
                setFetchLimit(text);
            }
        };
         = new TextAdapter(new JTextField(7)) {
            protected void updateModel(String text) {
                setPageSize(text);
            }
        };
         = CayenneWidgetFactory.createUndoableComboBox();
         = new TextAdapter(new JTextField()) {
            protected void updateModel(String text) {
                setCacheGroups(text);
            }
        };
    }
    protected void initController() {
            public void actionPerformed(ActionEvent event) {
                QueryCacheStrategy strategy = (QueryCacheStrategy) 
                        .getModel()
                        .getSelectedItem();
                setQueryProperty("cacheStrategy"strategy);
                setCacheGroupsEnabled(strategy != null
                        && strategy != QueryCacheStrategy.NO_CACHE);
            }
        });
    }

    
Updates the view from the current model state. Invoked when a currently displayed query is changed.
    public void initFromModel(Query query) {
        DefaultComboBoxModel cacheModel = new DefaultComboBoxModel();
        
        // TODO (andrey, 15/12/09)
        //do not use metadata, as it triggers CDO class loading (CAY-1334)
        //to avoid this evil hack, we need some common interface for SelectQuery, EJBQL
        // & SQLTemplate, but 3.0 API is frozen now
        QueryCacheStrategy selectedStrategy = (QueryCacheStrategy)
            PropertyUtils.getProperty(query"cacheStrategy");
        cacheModel.setSelectedItem(selectedStrategy != null
                ? selectedStrategy
                : QueryCacheStrategy.getDefaultStrategy());
        .setModel(cacheModel);
        String[] cacheGroupsArray = (String[]) PropertyUtils.getProperty(query"cacheGroups");
        .setText(toCacheGroupsString(cacheGroupsArray));
        setCacheGroupsEnabled(selectedStrategy != null
                && selectedStrategy != QueryCacheStrategy.NO_CACHE);
        .setText(String.valueOf(PropertyUtils.getProperty(query"fetchOffset")));
        .setText(String.valueOf(PropertyUtils.getProperty(query"fetchLimit")));
        .setText(String.valueOf(PropertyUtils.getProperty(query"pageSize")));
    }
    protected String toCacheGroupsString(String[] groups) {
        StringBuilder buffer = new StringBuilder();
        if (groups != null && groups.length > 0) {
            for (int i = 0; i < groups.lengthi++) {
                if (i > 0) {
                    buffer.append(", ");
                }
                buffer.append(groups[i]);
            }
        }
        return buffer.toString();
    }
    void setFetchOffset(String string) {
        string = (string == null) ? "" : string.trim();
        if (string.length() == 0) {
            setQueryProperty("fetchOffset");
        }
        else {
            try {
                setQueryProperty("fetchOffset"new Integer(string));
            }
            catch (NumberFormatException nfex) {
                throw new ValidationException("Fetch offset must be an integer: "
                        + string);
            }
        }
    }
    void setFetchLimit(String string) {
        string = (string == null) ? "" : string.trim();
        if (string.length() == 0) {
            setQueryProperty("fetchLimit");
        }
        else {
            try {
                setQueryProperty("fetchLimit"new Integer(string));
            }
            catch (NumberFormatException nfex) {
                throw new ValidationException("Fetch limit must be an integer: " + string);
            }
        }
    }
    void setPageSize(String string) {
        string = (string == null) ? "" : string.trim();
        if (string.length() == 0) {
            setQueryProperty("pageSize");
        }
        else {
            try {
                setQueryProperty("pageSize"new Integer(string));
            }
            catch (NumberFormatException nfex) {
                throw new ValidationException("Page size must be an integer: " + string);
            }
        }
    }
    void setCacheGroups(String string) {
        string = (string == null) ? "" : string.trim();
        StringTokenizer toks = new StringTokenizer(string", \t");
        String[] cacheGroups = new String[toks.countTokens()];
        for (int i = 0; i < cacheGroups.lengthi++) {
            cacheGroups[i] = toks.nextToken();
        }
        setQueryProperty("cacheGroups"cacheGroups);
    }
    Query getQuery() {
        return .getCurrentQuery();
    }
    public void setEnabled(boolean flag) {
        super.setEnabled(flag);
        // propagate to children
        Container mainPanel = (ContainergetComponent(0);
        Component[] children = mainPanel.getComponents();
        for (Component child : children) {
            child.setEnabled(flag);
        }
    }
    protected void setCacheGroupsEnabled(boolean enabled) {
        .getComponent().setEnabled(enabled);
        .setEnabled(enabled);
    }
    void setQueryProperty(String propertyObject value) {
        Query query = getQuery();
        if (query != null) {
            try {
                Object old = PropertyUtils.getProperty(queryproperty);
                if (Util.nullSafeEquals(valueold)) {
                    return;
                }
                PropertyUtils.setProperty(querypropertyvalue);
                .fireQueryEvent(new QueryEvent(thisquery));
            }
            catch (Exception ex) {
                .warn("Error setting property: " + propertyex);
            }
        }
    }
    final class CacheStrategyRenderer extends DefaultListCellRenderer {
        public Component getListCellRendererComponent(
                JList list,
                Object object,
                int arg2,
                boolean arg3,
                boolean arg4) {
            if (object != null) {
                object = .get(object);
            }
            if (object == null) {
                object = ;
            }
            return super.getListCellRendererComponent(listobjectarg2arg3arg4);
        }
    }