/*******************************************************************************
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership.
*
* Licensed 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 hr.fer.zemris.vhdllab.platform.ui.wizard.schema;
import hr.fer.zemris.vhdllab.applets.editor.schema2.constants.Constants;
import hr.fer.zemris.vhdllab.applets.editor.schema2.interfaces.ISchemaComponentCollection;
import hr.fer.zemris.vhdllab.applets.editor.schema2.interfaces.ISchemaInfo;
import hr.fer.zemris.vhdllab.applets.editor.schema2.misc.Caseless;
import hr.fer.zemris.vhdllab.applets.editor.schema2.model.InOutSchemaComponent;
import hr.fer.zemris.vhdllab.applets.editor.schema2.model.SchemaEntity;
import hr.fer.zemris.vhdllab.applets.editor.schema2.model.SchemaInfo;
import hr.fer.zemris.vhdllab.applets.editor.schema2.model.serialization.SchemaSerializer;
import hr.fer.zemris.vhdllab.entity.File;
import hr.fer.zemris.vhdllab.entity.FileType;
import hr.fer.zemris.vhdllab.platform.ui.wizard.AbstractNewFileWizard;
import hr.fer.zemris.vhdllab.platform.ui.wizard.support.FileForm;
import hr.fer.zemris.vhdllab.platform.ui.wizard.support.PortWizardPage;
import hr.fer.zemris.vhdllab.service.ci.CircuitInterface;
import hr.fer.zemris.vhdllab.service.ci.Port;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashSet;
import org.apache.commons.lang.UnhandledException;
public class NewSchemaWizard extends AbstractNewFileWizard {
private static final int MARGIN_OFFSET = Constants.GRID_SIZE * 2;
private FileForm fileForm;
private PortWizardPage portWizardPage;
@Override
public void addPages() {
fileForm = new FileForm();
addForm(fileForm);
portWizardPage = new PortWizardPage();
addPage(portWizardPage);
}
@Override
protected File getFile() {
return getFile(fileForm);
}
@Override
protected FileType getFileType() {
return FileType.SCHEMA;
}
@Override
protected String createData() {
CircuitInterface ci = getCircuitInterface(fileForm, portWizardPage);
try {
return createSchema(ci);
} catch (Exception e) {
throw new UnhandledException(e);
}
}
private String createSchema(CircuitInterface ci) throws Exception {
ISchemaInfo info = new SchemaInfo();
Caseless cname = new Caseless(ci.getName());
info.getEntity().getParameters().setValue(SchemaEntity.KEY_NAME, cname);
HashSet<Object> allowed = new HashSet<Object>();
allowed.add(cname);
info.getEntity().getParameters().getParameter(SchemaEntity.KEY_NAME)
.getConstraint().setPossibleValues(allowed);
int ly = MARGIN_OFFSET, ry = MARGIN_OFFSET;
ISchemaComponentCollection components = info.getComponents();
for (Port p : ci.getPorts()) {
InOutSchemaComponent inout = new InOutSchemaComponent(p);
if (p.isIN()) {
components.addComponent(MARGIN_OFFSET, ly, inout);
ly += inout.getHeight() + MARGIN_OFFSET;
} else { // else isOUT
components.addComponent(Constants.DEFAULT_SCHEMA_WIDTH, ry,
inout);
ry += inout.getHeight() + MARGIN_OFFSET;
}
}
SchemaSerializer ss = new SchemaSerializer();
StringWriter writer = new StringWriter(1000 + 1000 * ci.getPorts()
.size());
try {
ss.serializeSchema(writer, info);
} catch (IOException e) {
throw new UnhandledException(e);
}
return writer.toString();
}
}