org.bidib.wizard.dmx.client.model.DmxDataRow Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bidibwizard-dmx-client Show documentation
Show all versions of bidibwizard-dmx-client Show documentation
jBiDiB BiDiB Wizard DMX client POM
package org.bidib.wizard.dmx.client.model;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.jgoodies.common.base.Objects;
import com.jidesoft.grid.DefaultExpandableRow;
/**
* The {@code DmxDataRow} contains the time data and the configuration variables.
*/
public class DmxDataRow extends DefaultExpandableRow {
private static final Logger LOGGER = LoggerFactory.getLogger(DmxDataRow.class);
private final DmxDataIndex dmxDataIndex;
private final List cvValues = new ArrayList<>();
private boolean dirty;
public DmxDataRow(final DmxDataIndex timeIndex) {
this.dmxDataIndex = timeIndex;
}
@Override
public Object getValueAt(int columnIndex) {
switch (columnIndex) {
case DmxDataSetTreeTableModel.COLUMN_TIME_INDEX:
return dmxDataIndex;
default:
if (cvValues.size() > 0 && columnIndex < (cvValues.size() + 1)) {
Integer val = cvValues.get(columnIndex - 1).getNewValue();
if (val == null) {
val = cvValues.get(columnIndex - 1).getValue();
}
return val;
}
else if (columnIndex == cvValues.size() + 1) {
// COLUMN_ACTION
}
else {
LOGGER.warn("getValueAt, column out of range: {}", columnIndex);
}
break;
}
return null;
}
@Override
public void setValueAt(Object value, int columnIndex) {
switch (columnIndex) {
case DmxDataSetTreeTableModel.COLUMN_TIME_INDEX:
break;
default:
if (cvValues.size() > 0 && columnIndex < (cvValues.size() + 1)) {
DmxChannelValue currentValue = cvValues.get(columnIndex - 1);
if ((!Objects.equals(currentValue.getValue(), value) && currentValue.getNewValue() == null)
|| (currentValue.getNewValue() != null && !Objects.equals(currentValue.getNewValue(), value))) {
currentValue.setNewValue(value != null ? (Integer) value : null);
LOGGER.info("Value has changed, columnIndex: {}, value: {}", columnIndex, value);
setDirty(true);
}
}
else if (columnIndex == cvValues.size() + 1) {
// COLUMN_ACTION
}
else {
LOGGER.warn("setValueAt, column out of range: {}, value: {}", columnIndex, value);
}
break;
}
super.setValueAt(value, columnIndex);
}
@Override
public boolean isCellEditable(int columnIndex) {
switch (columnIndex) {
default:
if (cvValues.size() > 0 && columnIndex > 0 && columnIndex < (cvValues.size() + 1)) {
return true;
}
else if (columnIndex == cvValues.size() + 1) {
// COLUMN_ACTION
return true;
}
break;
}
return false;
}
@Override
public Class> getCellClassAt(int columnIndex) {
switch (columnIndex) {
case DmxDataSetTreeTableModel.COLUMN_TIME_INDEX:
return DmxDataIndex.class;
default:
if (cvValues.size() > 0 && columnIndex > 0 && columnIndex < (cvValues.size() + 1)) {
return Integer.class;
}
else if (columnIndex == (cvValues.size() + 1)) {
// COLUMN_ACTION
return MappingAction.class;
}
break;
}
return super.getCellClassAt(columnIndex);
}
/**
* @return the dataIndex
*/
public DmxDataIndex getDataIndex() {
return dmxDataIndex;
}
public List getCvValues() {
return Collections.unmodifiableList(cvValues);
}
public void addCvValue(DmxChannelValue channel) {
this.cvValues.add(channel);
}
public void removeChannelAtIndex(int channelIndex) {
this.cvValues.remove(channelIndex);
}
public void clearChannels() {
this.cvValues.clear();
}
/**
* @return the dirty
*/
public boolean isDirty() {
return dirty;
}
/**
* @param dirty
* the dirty to set
*/
public void setDirty(boolean dirty) {
this.dirty = dirty;
if (!dirty) {
LOGGER.debug("The dirty flag ist reset. Reset the new values.");
// reset the new values
for (DmxChannelValue value : this.cvValues) {
value.setNewValue(null);
}
}
}
public boolean isRowValid() {
for (DmxChannelValue value : cvValues) {
if (value.getValue() == null) {
return false;
}
}
return true;
}
public Integer getBrightness(int channelIndex) {
return (Integer) getValueAt(channelIndex + 1);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
}