/*****************************************************************
* 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.List;
import org.apache.cayenne.map.CallbackDescriptor;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.event.MapEvent;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.event.CallbackMethodEvent;
import org.apache.cayenne.modeler.util.CayenneTableModel;
/**
* Table model for displaying methods list for a particular CallbackDescriptor
*/
public class CallbackDescriptorTableModel extends CayenneTableModel<String> {
private static final int COLUMN_COUNT = 1;
public static final int METHOD_NAME = 0;
protected ObjEntity entity;
protected CallbackDescriptor callbackDescriptor;
protected CallbackType callbackType;
/**
* constructor
*
* @param mediator mediator instance
* @param eventSource event source
* @param objectList default objects list
* @param callbackDescriptor callback descriptor instance
*/
public CallbackDescriptorTableModel(ProjectController mediator, Object eventSource,
List<String> objectList, CallbackDescriptor callbackDescriptor, CallbackType callbackType) {
super(mediator, eventSource, objectList);
this.callbackDescriptor = callbackDescriptor;
this.callbackType = callbackType;
}
/**
* does nothing
*
* @param newVal newVal
* @param row row
* @param col col
*/
public void setUpdatedValueAt(Object newVal, int row, int col) {
// do nothing
}
/**
* Returns Java class of the internal list elements.
*/
public Class getElementsClass() {
return String.class;
}
/**
* @param rowIndex method index
* @return callback method for the specified index
*/
public String getCallbackMethod(int rowIndex) {
return objectList.get(rowIndex);
}
/**
* Returns the number of columns in the model. A <code>JTable</code> uses this method
* to determine how many columns it should create and display by default.
*
* @return the number of columns in the model
* @see #getRowCount
*/
public int getColumnCount() {
return COLUMN_COUNT;
}
/**
* Returns the value for the cell at <code>columnIndex</code> and
* <code>rowIndex</code>.
*
* @param rowIndex the row whose value is to be queried
* @param columnIndex the column whose value is to be queried
* @return the value Object at the specified cell
*/
public Object getValueAt(int rowIndex, int columnIndex) {
return getCallbackMethod(rowIndex);
}
/**
* @param column column index
* @return column name
*/
public String getColumnName(int column) {
return callbackType.getName();
}
/**
* all cells are editable
*
* @param rowIndex row index
* @param columnIndex column index
* @return true
*/
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
/**
* stores edited value
*
* @param newVal new value
* @param row row
* @param col column
*/
public void setValueAt(Object newVal, int row, int col) {
String method = (String) newVal;
if (method != null) {
method = method.trim();
}
String prevMethod = getObjectList().get(row);
if (method != null && method.length() > 0) {
// check that method changed and name is not duplicate
if (!method.equals(prevMethod) && !getCallbackDescriptor().getCallbackMethods().contains(method)) {
// update model
getObjectList().set(row, method);
// update entity
getCallbackDescriptor().setCallbackMethodAt(row, method);
fireTableRowsUpdated(row, row);
mediator.fireCallbackMethodEvent(new CallbackMethodEvent(
eventSource,
prevMethod,
method,
MapEvent.CHANGE));
}
}
}
/**
* @return CallbackDescriptor of the model
*/
public CallbackDescriptor getCallbackDescriptor() {
return callbackDescriptor;
}
/**
* @return CallbackType of the model
*/
public CallbackType getCallbackType() {
return callbackType;
}
@Override
public boolean isColumnSortable(int sortCol) {
return false;
}
@Override
public void sortByColumn(int sortCol, boolean isAscent) {
}
}