package org.openlegacy.designtime.terminal.model.support;
import org.apache.commons.lang.SerializationUtils;
import org.openlegacy.designtime.terminal.model.ScreenEntityDesigntimeDefinition;
import org.openlegacy.terminal.ScreenSize;
import org.openlegacy.terminal.TerminalPosition;
import org.openlegacy.terminal.TerminalRectangle;
import org.openlegacy.terminal.TerminalSnapshot;
import org.openlegacy.terminal.definitions.ScreenTableDefinition;
import org.openlegacy.terminal.definitions.SimpleScreenEntityDefinition;
import org.openlegacy.terminal.definitions.SimpleScreenTableDefinition;
import org.openlegacy.terminal.support.SimpleTerminalPosition;
import org.openlegacy.terminal.support.SimpleTerminalRectangle;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
public class SimpleScreenEntityDesigntimeDefinition extends SimpleScreenEntityDefinition implements ScreenEntityDesigntimeDefinition, Serializable {
private static final String RECORD = "Record";
public SimpleScreenEntityDesigntimeDefinition() {
super(null, null);
}
private static final long serialVersionUID = 1L;
private TerminalSnapshot terminalSnapshot;
private String packageName;
private TerminalRectangle snapshotBorders = null;
private List<SimpleScreenTableDefinition> temporaryTableDefinitions = new ArrayList<SimpleScreenTableDefinition>();
private List<String> imports = new ArrayList<String>();
private TerminalSnapshot originalSnapshot;
private TerminalSnapshot outgoingSnapshot;
private Collection<TerminalSnapshot> allSnapshots;
@Override
public void setEntityName(String entityName) {
super.setEntityName(entityName);
populateTableNames(entityName);
}
/**
* Get names to table. Table rely on the screen entity name, and one screen entity name is set, also set names for tables
*/
private void populateTableNames(String entityName) {
if (temporaryTableDefinitions.size() > 0) {
int count = 0;
for (SimpleScreenTableDefinition tableDefinition : temporaryTableDefinitions) {
setNewTableName(entityName, count, tableDefinition);
count++;
}
temporaryTableDefinitions.clear();
} else {
if (entityName.equals(getEntityName())) {
return;
}
Set<String> oldTableNames = getTableDefinitions().keySet();
Collection<ScreenTableDefinition> tablesDefintions = Collections.unmodifiableCollection(getTableDefinitions().values());
int count = 0;
for (ScreenTableDefinition tableDefinition : tablesDefintions) {
setNewTableName(entityName, count, (SimpleScreenTableDefinition)tableDefinition);
count++;
}
for (String oldTableName : oldTableNames) {
getTableDefinitions().remove(oldTableName);
}
}
}
private void setNewTableName(String entityName, int count, SimpleScreenTableDefinition tableDefinition) {
String tableSuffix = count == 0 ? "" : String.valueOf(count - 1);
String tableEntityName = MessageFormat.format("{0}{1}{2}", entityName, RECORD, tableSuffix);
tableDefinition.setTableEntityName(tableEntityName);
getTableDefinitions().put(tableEntityName, tableDefinition);
}
@Override
public void setSnapshot(TerminalSnapshot terminalSnapshot) {
this.terminalSnapshot = (TerminalSnapshot)SerializationUtils.clone(terminalSnapshot);
this.originalSnapshot = (TerminalSnapshot)SerializationUtils.clone(terminalSnapshot);
}
@Override
public TerminalSnapshot getSnapshot() {
return terminalSnapshot;
}
@Override
public TerminalSnapshot getOriginalSnapshot() {
return originalSnapshot;
}
@Override
public String getPackageName() {
return packageName;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
public TerminalRectangle getSnapshotBorders() {
if (snapshotBorders == null) {
TerminalPosition topLeft = new SimpleTerminalPosition(1, 1);
ScreenSize size = getSnapshot().getSize();
TerminalPosition buttomRight = new SimpleTerminalPosition(size.getRows(), size.getColumns());
snapshotBorders = new SimpleTerminalRectangle(topLeft, buttomRight);
}
return snapshotBorders;
}
public void setSnapshotBorders(TerminalRectangle snapshotBorders) {
this.snapshotBorders = snapshotBorders;
setWindow(true);
}
public void addTemporaryTable(SimpleScreenTableDefinition tableDefinition) {
temporaryTableDefinitions.add(tableDefinition);
}
public List<SimpleScreenTableDefinition> getTemporaryTableDefinitions() {
return temporaryTableDefinitions;
}
@Override
public String toString() {
return getSnapshot().toString();
}
public List<String> getReferredClasses() {
return imports;
}
public TerminalSnapshot getOutgoingSnapshot() {
return outgoingSnapshot;
}
public void setOutgoingSnapshot(TerminalSnapshot outgoingSnapshot) {
this.outgoingSnapshot = outgoingSnapshot;
}
public Collection<TerminalSnapshot> getAllSnapshots() {
return allSnapshots;
}
public void setAllSnapshots(Collection<TerminalSnapshot> allSnapshots) {
this.allSnapshots = allSnapshots;
}
}