Example usage for com.jgoodies.forms.layout CellConstraints xyw

List of usage examples for com.jgoodies.forms.layout CellConstraints xyw

Introduction

In this page you can find the example usage for com.jgoodies.forms.layout CellConstraints xyw.

Prototype

public CellConstraints xyw(int col, int row, int colSpan) 

Source Link

Document

Sets the column, row, width, and height; uses a height (row span) of 1 and the horizontal and vertical default alignments.

Examples:

 cc.xyw(1, 3, 7); cc.xyw(1, 3, 2); 

Usage

From source file:eu.apenet.dpt.standalone.gui.eaccpf.EacCpfIdentityPanel.java

License:EUPL

/**
 * Main method to build the identifier section.
 *
 * @param builder//from  w w w  . j  a  v  a 2  s .c  om
 * @param cc
 * @return the PanelBuilder
 */
private PanelBuilder buildIdentifierSection(PanelBuilder builder, CellConstraints cc) {
    this.setNextRow();
    builder.addSeparator("", cc.xyw(1, this.rowNb, 7));
    this.setNextRow();

    // Set section title.
    this.setNextRow();
    builder.addSeparator(this.labels.getString("eaccpf.identity.identifier"), cc.xyw(1, this.rowNb, 7));
    this.setNextRow();

    // Define values of the section.
    if (this.eaccpf.getCpfDescription().getIdentity().getEntityId().isEmpty()) {
        this.eaccpf.getCpfDescription().getIdentity().getEntityId().add(new EntityId());
    }

    List<EntityId> entityIds = this.eaccpf.getCpfDescription().getIdentity().getEntityId();

    this.identifierTfs = new ArrayList<JTextField>(entityIds.size());
    this.identifierTypeTfs = new ArrayList<JTextField>(entityIds.size());

    for (EntityId entityId : entityIds) {
        // Create element.
        JTextField identifierTf = new JTextField(entityId.getContent());
        JTextField identifierTypeTf = new JTextField(entityId.getLocalType());

        // Add elements to the list.
        this.identifierTfs.add(identifierTf);
        this.identifierTypeTfs.add(identifierTypeTf);

        // Add elements to the panel.
        if (this.entityType != null
                && XmlTypeEacCpf.EAC_CPF_CORPORATEBODY.getName().equalsIgnoreCase(this.entityType.getName())) {
            builder.addLabel(this.labels.getString("eaccpf.identity.identifier.corporateBody"),
                    cc.xy(1, this.rowNb));
        } else if (this.entityType != null
                && XmlTypeEacCpf.EAC_CPF_FAMILY.getName().equalsIgnoreCase(this.entityType.getName())) {
            builder.addLabel(this.labels.getString("eaccpf.identity.identifier.family"), cc.xy(1, this.rowNb));
        } else if (this.entityType != null
                && XmlTypeEacCpf.EAC_CPF_PERSON.getName().equalsIgnoreCase(this.entityType.getName())) {
            builder.addLabel(this.labels.getString("eaccpf.identity.identifier.person"), cc.xy(1, this.rowNb));
        } else {
            builder.addLabel(this.labels.getString("eaccpf.identity.identifier"), cc.xy(1, this.rowNb));
        }

        builder.add(identifierTf, cc.xy(3, this.rowNb));
        builder.addLabel(this.labels.getString("eaccpf.identity.identifier.agency"), cc.xy(5, this.rowNb));
        builder.add(identifierTypeTf, cc.xy(7, this.rowNb));
        this.setNextRow();
    }

    // Button to add new entries.
    JButton addIdentifierBtn = new ButtonTab(this.labels.getString("eaccpf.identity.add.identifier"));
    addIdentifierBtn.addActionListener(new AddIdentifierAction(this.eaccpf, this.tabbedPane, this.model));
    builder.add(addIdentifierBtn, cc.xy(1, this.rowNb));

    return builder;
}

From source file:eu.apenet.dpt.standalone.gui.eaccpf.EacCpfIdentityPanel.java

License:EUPL

/**
 * Main method to build the dates of existence section.
 *
 * @param builder/*  ww w .  j a  va2  s .  co  m*/
 * @param cc
 * @param errors
 * @return the PanelBuilder
 */
private PanelBuilder buildDatesOfExistenceSection(PanelBuilder builder, CellConstraints cc,
        List<String> errors) {
    this.setNextRow();
    builder.addSeparator("", cc.xyw(1, this.rowNb, 7));
    this.setNextRow();

    // Set section title.
    this.setNextRow();
    builder.addSeparator(this.labels.getString("eaccpf.identity.dates.existence") + "*",
            cc.xyw(1, this.rowNb, 7));

    // Define values of the section.
    if (this.eaccpf.getCpfDescription().getDescription() == null) {
        this.eaccpf.getCpfDescription().setDescription(new Description());
    }
    if (this.eaccpf.getCpfDescription().getDescription().getExistDates() == null) {
        this.eaccpf.getCpfDescription().getDescription().setExistDates(new ExistDates());
    }
    if (this.eaccpf.getCpfDescription().getDescription().getExistDates().getDate() == null
            && this.eaccpf.getCpfDescription().getDescription().getExistDates().getDateRange() == null
            && this.eaccpf.getCpfDescription().getDescription().getExistDates().getDateSet() == null) {
        this.eaccpf.getCpfDescription().getDescription().getExistDates().setDateRange(new DateRange());
    }

    List<Object> existingDates = getAllDates(this.eaccpf.getCpfDescription().getDescription().getExistDates());
    this.existenceDateTFs = new ArrayList<TextFieldsWithRadioButtonForDates>(existingDates.size());

    int position = 0;

    for (Object object : existingDates) {
        this.setNextRow();

        // Type of date.
        boolean isDateRange = false;
        // Create element.
        TextFieldsWithRadioButtonForDates existenceDateTF = null;
        if (object instanceof Date) {
            Date date = (Date) object;
            boolean isDateUndefined = this.isUndefinedDate(date.getLocalType());
            boolean isStillDate = (!isDateUndefined
                    && (date != null && date.getLocalType() != null && date.getLocalType().equals("open")));
            existenceDateTF = new TextFieldsWithRadioButtonForDates(
                    this.labels.getString("eaccpf.commons.unknown.date"),
                    this.labels.getString("eaccpf.commons.date.known"),
                    (this.entityType.getName().equals(XmlTypeEacCpf.EAC_CPF_PERSON.getName()))
                            ? this.labels.getString("eaccpf.commons.date.open.person")
                            : this.labels.getString("eaccpf.commons.date.open.corpfam"),
                    date.getContent(), isDateUndefined, isStillDate, isStillDate, date.getStandardDate(), "",
                    false, "", "", false, "", false);
        } else if (object instanceof DateRange) {
            isDateRange = true;
            DateRange dateRange = (DateRange) object;
            String dateFrom = "";
            String dateFromStandard = "";
            String dateTo = "";
            String dateToStandard = "";

            if (dateRange.getFromDate() != null) {
                if (dateRange.getFromDate().getContent() != null
                        && !dateRange.getFromDate().getContent().isEmpty()) {
                    dateFrom = dateRange.getFromDate().getContent();
                }
                if (dateRange.getFromDate().getStandardDate() != null
                        && !dateRange.getFromDate().getStandardDate().isEmpty()) {
                    dateFromStandard = dateRange.getFromDate().getStandardDate();
                }
            }
            if (dateRange.getToDate() != null) {
                if (dateRange.getToDate().getContent() != null
                        && !dateRange.getToDate().getContent().isEmpty()) {
                    dateTo = dateRange.getToDate().getContent();
                }
                if (dateRange.getToDate().getStandardDate() != null
                        && !dateRange.getToDate().getStandardDate().isEmpty()) {
                    dateToStandard = dateRange.getToDate().getStandardDate();
                }
            }

            boolean isDateFromUndefined = this.isUndefinedFromDate(dateRange);
            boolean isDateToUndefined = this.isUndefinedToDate(dateRange);
            boolean isDateFromOpen = isOpenFromDate(dateRange);
            boolean isDateToOpen = isOpenToDate(dateRange);
            existenceDateTF = new TextFieldsWithRadioButtonForDates(
                    this.labels.getString("eaccpf.commons.unknown.date"),
                    this.labels.getString("eaccpf.commons.date.known"),
                    (this.entityType.getName().equals(XmlTypeEacCpf.EAC_CPF_PERSON.getName()))
                            ? this.labels.getString("eaccpf.commons.date.open.person")
                            : this.labels.getString("eaccpf.commons.date.open.corpfam"),
                    "", false, isDateFromOpen, isDateToOpen, "", dateFrom, isDateFromUndefined,
                    dateFromStandard, dateTo, isDateToUndefined, dateToStandard, true);
        }

        // Add elements to the list.
        this.existenceDateTFs.add(existenceDateTF);

        // Add elements to the panel.
        if (isDateRange) {
            // First date row. Normal date text fields.
            builder.addLabel(this.labels.getString("eaccpf.commons.from.date") + ((position == 0) ? "*" : ""),
                    cc.xy(1, this.rowNb));
            existenceDateTF.getDateFromTextField()
                    .addFocusListener(new AddIsoText(existenceDateTF, EacCpfIdentityPanel.UNKNOWN_DATE_FROM));
            builder.add(existenceDateTF.getDateFromTextField(), cc.xy(3, this.rowNb));
            builder.addLabel(this.labels.getString("eaccpf.commons.to.date") + ((position == 0) ? "*" : ""),
                    cc.xy(5, this.rowNb));
            existenceDateTF.getDateToTextField()
                    .addFocusListener(new AddIsoText(existenceDateTF, EacCpfIdentityPanel.UNKNOWN_DATE_TO));
            builder.add(existenceDateTF.getDateToTextField(), cc.xy(7, this.rowNb));

            // Second date row. Unknown radio boxes.
            setNextRow();
            builder.addLabel(this.labels.getString("eaccpf.commons.date.type"), cc.xy(1, this.rowNb));
            existenceDateTF.getDateFromDefinedRB().addActionListener(
                    new AddUndefinedTexts(existenceDateTF, EacCpfIdentityPanel.KNOWN_DATE_FROM));
            existenceDateTF.getDateToDefinedRB().addActionListener(
                    new AddUndefinedTexts(existenceDateTF, EacCpfIdentityPanel.KNOWN_DATE_TO));
            builder.add(existenceDateTF.getDateFromDefinedRB(), cc.xy(3, this.rowNb));
            builder.add(existenceDateTF.getDateToDefinedRB(), cc.xy(7, this.rowNb));

            this.setNextRow();
            existenceDateTF.getDateFromUndefinedRB().addActionListener(
                    new AddUndefinedTexts(existenceDateTF, EacCpfIdentityPanel.UNKNOWN_DATE_FROM));
            existenceDateTF.getDateToUndefinedRB().addActionListener(
                    new AddUndefinedTexts(existenceDateTF, EacCpfIdentityPanel.UNKNOWN_DATE_TO));
            builder.add(existenceDateTF.getDateFromUndefinedRB(), cc.xy(3, this.rowNb));
            builder.add(existenceDateTF.getDateToUndefinedRB(), cc.xy(7, this.rowNb));

            setNextRow();
            existenceDateTF.getDateFromStillRB().addActionListener(
                    new AddUndefinedTexts(existenceDateTF, EacCpfIdentityPanel.STILL_DATE_FROM));
            existenceDateTF.getDateToStillRB().addActionListener(
                    new AddUndefinedTexts(existenceDateTF, EacCpfIdentityPanel.STILL_DATE_TO));
            //            builder.add(existenceDateTF.getDateFromStillRB(), cc.xy(3, this.rowNb));
            builder.add(existenceDateTF.getDateToStillRB(), cc.xy(7, this.rowNb));

            // Third date row. Standard dates.
            setNextRow();
            builder.addLabel(this.labels.getString("eaccpf.commons.iso.date"), cc.xy(1, this.rowNb));
            existenceDateTF.getStandardDateFromTextField()
                    .addFocusListener(new CheckIsoText(existenceDateTF, EacCpfIdentityPanel.UNKNOWN_DATE_FROM));
            builder.add(existenceDateTF.getStandardDateFromTextField(), cc.xy(3, this.rowNb));
            //builder.addLabel(this.labels.getString("eaccpf.commons.iso.date"), cc.xy(5, this.rowNb));
            existenceDateTF.getStandardDateToTextField()
                    .addFocusListener(new CheckIsoText(existenceDateTF, EacCpfIdentityPanel.UNKNOWN_DATE_TO));
            builder.add(existenceDateTF.getStandardDateToTextField(), cc.xy(7, this.rowNb));

            if (errors.contains(EacCpfIdentityPanel.ERROR_EXISTENCE_DATES) && position == 0) {
                this.setNextRow();
                builder.add(createErrorLabel(this.labels.getString("eaccpf.identity.error.empty.date.label")),
                        cc.xyw(1, this.rowNb, 3));
            }
        } else {
            // First date row. Normal date text fields.
            builder.addLabel(this.labels.getString("eaccpf.commons.date"), cc.xy(1, this.rowNb));
            existenceDateTF.getDateTextField()
                    .addFocusListener(new AddIsoText(existenceDateTF, EacCpfIdentityPanel.UNKNOWN_DATE));
            builder.add(existenceDateTF.getDateTextField(), cc.xy(3, this.rowNb));

            // Second date row. Unknown radiobuttons.
            setNextRow();
            existenceDateTF.getDateDefinedRB()
                    .addActionListener(new AddUndefinedTexts(existenceDateTF, EacCpfIdentityPanel.KNOWN_DATE));
            builder.add(existenceDateTF.getDateDefinedRB(), cc.xy(3, this.rowNb));

            this.setNextRow();
            existenceDateTF.getDateUndefinedRB().addActionListener(
                    new AddUndefinedTexts(existenceDateTF, EacCpfIdentityPanel.UNKNOWN_DATE));
            builder.add(existenceDateTF.getDateUndefinedRB(), cc.xy(3, this.rowNb));
            setNextRow();
            existenceDateTF.getDateStillRB()
                    .addActionListener(new AddUndefinedTexts(existenceDateTF, EacCpfIdentityPanel.STILL_DATE));
            builder.add(existenceDateTF.getDateStillRB(), cc.xy(3, this.rowNb));

            // Third date row. Standard dates.
            this.setNextRow();
            builder.addLabel(this.labels.getString("eaccpf.commons.iso.date"), cc.xy(1, this.rowNb));
            existenceDateTF.getStandardDateTextField()
                    .addFocusListener(new CheckIsoText(existenceDateTF, EacCpfIdentityPanel.UNKNOWN_DATE));
            builder.add(existenceDateTF.getStandardDateTextField(), cc.xy(3, this.rowNb));

            if (errors.contains(EacCpfIdentityPanel.ERROR_EXISTENCE_DATES) && position == 0) {
                this.setNextRow();
                builder.add(createErrorLabel(this.labels.getString("eaccpf.identity.error.empty.date.label")),
                        cc.xyw(1, this.rowNb, 3));
            }
        }

        position++;
    }

    // Buttons to add new entries.
    this.setNextRow();
    JButton addSingleDateBtn = new ButtonTab(this.labels.getString("eaccpf.commons.add.single.date"));
    addSingleDateBtn.addActionListener(
            new AddSingleOrRangeDateAction(this.eaccpf, this.tabbedPane, this.model, false, false, 0));
    builder.add(addSingleDateBtn, cc.xy(1, this.rowNb));
    JButton addRangeDateBtn = new ButtonTab(this.labels.getString("eaccpf.commons.add.range.date"));
    addRangeDateBtn.addActionListener(
            new AddSingleOrRangeDateAction(this.eaccpf, this.tabbedPane, this.model, false, true, 0));
    builder.add(addRangeDateBtn, cc.xy(3, this.rowNb));

    return builder;
}

From source file:eu.apenet.dpt.standalone.gui.eaccpf.EacCpfIdentityPanel.java

License:EUPL

/**
 * Method to build the main buttons zone.
 *
 * @param builder the PanelBuilder to add the buttons.
 * @param cc the constraints to use.//from  w  w w. j a  v  a  2s  . c o  m
 * @return the PanelBuilder with the buttons.
 */
private PanelBuilder buildButtons(PanelBuilder builder, CellConstraints cc) {
    // Row for the next tab button.
    this.setNextRow();
    builder.addSeparator("", cc.xyw(1, this.rowNb, 7));
    this.setNextRow();
    JButton nextTabBtn = new ButtonTab(this.labels.getString("eaccpf.commons.nextTab"));
    builder.add(nextTabBtn, cc.xy(5, this.rowNb));
    nextTabBtn.addActionListener(new NextTabBtnAction(this.eaccpf, this.tabbedPane, this.model));

    // Row for exit and save buttons.
    this.setNextRow();
    JButton exitBtn = new ButtonTab(this.labels.getString("eaccpf.commons.exit"));
    builder.add(exitBtn, cc.xy(1, this.rowNb));
    exitBtn.addActionListener(new ExitBtnAction(this.eaccpf, this.tabbedPane, this.model));

    JButton saveBtn = new ButtonTab(labels.getString("eaccpf.commons.save"));
    builder.add(saveBtn, cc.xy(5, this.rowNb));
    saveBtn.addActionListener(new SaveBtnAction(this.eaccpf, this.tabbedPane, this.model));

    return builder;
}

From source file:eu.apenet.dpt.standalone.gui.eaccpf.EacCpfRelationsPanel.java

License:EUPL

private PanelBuilder buildSetRelationsSection(PanelBuilder builder, CellConstraints cc) {

    // Define values of the part.
    if (this.eaccpf.getCpfDescription().getAlternativeSet() == null) {
        this.eaccpf.getCpfDescription().setAlternativeSet(new AlternativeSet());
    }/*from  ww  w .  j a  v a2  s. c o  m*/

    if (this.eaccpf.getCpfDescription().getAlternativeSet().getSetComponent().isEmpty()) {
        //         this.eaccpf.getCpfDescription().getAlternativeSet().getSetComponent().add(new SetComponent());
    }

    List<SetComponent> setComponents = this.eaccpf.getCpfDescription().getAlternativeSet().getSetComponent();

    for (int i = 0; i < setComponents.size(); i++) {
        // Set title.
        this.setNextRow();
        builder.addSeparator(this.labels.getString("eaccpf.relations.cpf.relation"), cc.xyw(1, this.rowNb, 7));
        this.setNextRow();

        SetComponent setComponent = setComponents.get(i);

        // Create elements.
        TextFieldWithLanguage setComponentNameTf = null;
        JTextField setComponentIdentifierTf = null;
        TextFieldWithComboBoxEacCpf setComponentHrefAndTypeTf = new TextFieldWithComboBoxEacCpf(
                setComponent.getHref(), "identity", TextFieldWithComboBoxEacCpf.TYPE_CPF_RELATION,
                this.entityType, this.labels);
        TextAreaWithLanguage setComponentDescriptionTa = null;
        List<TextFieldWithLanguage> setComponentOrganisationNameAndIdTfList = new ArrayList<TextFieldWithLanguage>();

        // Recovers the values of the relation entry elements.
        String title = "";
        String other = "";
        String language = "";
        String id = "";
        List<String> agencyNameList = new ArrayList<String>();
        List<String> agencyCodeList = new ArrayList<String>();
        if (!setComponent.getComponentEntry().isEmpty()) {
            for (ComponentEntry componentEntry : setComponent.getComponentEntry()) {
                // Title of the relation.
                // /eacCpf/cpfDescription/relations/setComponent/componentEntry@localType='title'
                if (StringUtils.isNotEmpty(componentEntry.getLocalType())
                        && componentEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_TITLE)
                        && StringUtils.isNotEmpty(componentEntry.getContent())) {
                    title = componentEntry.getContent();
                }
                // Id of the relation.
                // /eacCpf/cpfDescription/relations/setComponent/componentEntry@localType='id'
                if (StringUtils.isNotEmpty(componentEntry.getLocalType())
                        && componentEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_ID)
                        && StringUtils.isNotEmpty(componentEntry.getContent())) {
                    id = componentEntry.getContent();
                }

                // Agency name of the relation.
                // /eacCpf/cpfDescription/relations/setComponent/componentEntry@localType='agencyName'
                if (StringUtils.isNotEmpty(componentEntry.getLocalType())
                        && componentEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_AGENCYNAME)) {
                    agencyNameList.add(componentEntry.getContent());
                }

                // Agency code of the relation.
                // /eacCpf/cpfDescription/relations/setComponent/componentEntry@localType='agencyCode'
                if (StringUtils.isNotEmpty(componentEntry.getLocalType())
                        && componentEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_AGENCYCODE)) {
                    agencyCodeList.add(componentEntry.getContent());
                }

                // Texts of relation entries without @localType.
                // This texts will be loaded in field "name"
                if (StringUtils.isNotEmpty(componentEntry.getContent())
                        && StringUtils.isEmpty(componentEntry.getLocalType())) {
                    if (!other.isEmpty()) {
                        other = other + ". ";
                    }
                    other = other + componentEntry.getContent();
                }

                // Language of the relation.
                // /eacCpf/cpfDescription/relations/setComponent/componentEntry@lang
                if (StringUtils.isEmpty(language) && StringUtils.isNotEmpty(componentEntry.getLang())) {
                    language = componentEntry.getLang();
                }
            }
        } else if (StringUtils.isNotEmpty(firstLanguage) && StringUtils.isEmpty(setComponent.getHref())
                && StringUtils.isEmpty(setComponent.getType())
                && (setComponent.getDescriptiveNote() == null || (setComponent.getDescriptiveNote() != null
                        && setComponent.getDescriptiveNote().getP().isEmpty()))) {
            language = firstLanguage;
        }

        // Identifier of the relation.
        setComponentIdentifierTf = new JTextField(id);

        // Descriptive note.
        // /eacCpf/cpfDescription/relations/cpfRelation/descriptiveNote
        // Currently only recovers the content of the first value.
        String descriptiveNote = "";
        if (setComponent.getDescriptiveNote() != null && !setComponent.getDescriptiveNote().getP().isEmpty()
                && StringUtils.isNotEmpty(setComponent.getDescriptiveNote().getP().get(0).getContent())) {
            descriptiveNote = setComponent.getDescriptiveNote().getP().get(0).getContent();
            if (StringUtils.isEmpty(language)) {
                language = setComponent.getDescriptiveNote().getP().get(0).getLang();
            }
        }
        setComponentDescriptionTa = new TextAreaWithLanguage(descriptiveNote, "", 1);

        // Name and language of the relation.
        if (title.isEmpty()) {
            title = other;
        }
        setComponentNameTf = new TextFieldWithLanguage(title, language);

        // Agency code and name of the relation.
        int size = 0;
        if (agencyNameList.size() > agencyCodeList.size()) {
            size = agencyNameList.size();
        } else {
            size = agencyCodeList.size();
        }

        if (size == 0) {
            agencyNameList.add("");
            agencyCodeList.add("");
            size = 1;
        }

        for (int j = 0; j < size; j++) {
            String agencyName = "";
            String agencyCode = "";

            if (agencyNameList.size() > j) {
                agencyName = agencyNameList.get(j);
            }

            if (agencyCodeList.size() > j) {
                agencyCode = agencyCodeList.get(j);
            }

            TextFieldWithLanguage cpfRelationOrganisationNameAndIdTf = new TextFieldWithLanguage(agencyName,
                    language, agencyCode);
            setComponentOrganisationNameAndIdTfList.add(cpfRelationOrganisationNameAndIdTf);
        }

        // Add elements to the list.
        this.cpfRelationNameTfs.add(setComponentNameTf);
        this.cpfRelationIdentifierTfs.add(setComponentIdentifierTf);
        this.cpfRelationHrefAndTypeTfs.add(setComponentHrefAndTypeTf);
        this.cpfRelationDescriptionTas.add(setComponentDescriptionTa);

        cpfRelationOrganisationNameAndIdTfs.add(setComponentOrganisationNameAndIdTfList);

        // Add elements to the panel.
        // Name and language.
        builder.addLabel(this.labels.getString("eaccpf.relations.cpf.relation.name"), cc.xy(1, this.rowNb));
        builder.add(setComponentNameTf.getTextField(), cc.xy(3, this.rowNb));
        builder.addLabel(this.labels.getString("eaccpf.commons.select.language"), cc.xy(5, this.rowNb));
        builder.add(setComponentNameTf.getLanguageBox(), cc.xy(7, this.rowNb));

        // Identity.
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.cpf.relation.identifier"),
                cc.xy(1, this.rowNb));
        builder.add(setComponentIdentifierTf, cc.xy(3, this.rowNb));

        // Link and relation type.
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.link"), cc.xy(1, this.rowNb));
        builder.add(setComponentHrefAndTypeTf.getTextField(), cc.xy(3, this.rowNb));
        builder.addLabel(this.labels.getString("eaccpf.relations.relation.type") + "*", cc.xy(5, this.rowNb));
        builder.add(setComponentHrefAndTypeTf.getComboBox(), cc.xy(7, this.rowNb));

        // Agency part.
        // Title.
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.cpf.relation.organisation"),
                cc.xyw(1, this.rowNb, 7));

        for (int j = 0; j < setComponentOrganisationNameAndIdTfList.size(); j++) {
            // Name and identifier.
            this.setNextRow();
            builder.addLabel(this.labels.getString("eaccpf.relations.name"), cc.xy(1, this.rowNb));
            builder.add(setComponentOrganisationNameAndIdTfList.get(j).getTextField(), cc.xy(3, this.rowNb));
            builder.addLabel(this.labels.getString("eaccpf.relations.identifier"), cc.xy(5, this.rowNb));
            builder.add(setComponentOrganisationNameAndIdTfList.get(j).getExtraField(), cc.xy(7, this.rowNb));
        }

        // Description.
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.description"), cc.xy(1, this.rowNb));
        builder.add(setComponentDescriptionTa.getTextField(), cc.xyw(3, this.rowNb, 5));

        // Button to add new agency information.
        //         this.setNextRow();
        //         JButton addFurtherAgencyBtn = new ButtonTab(this.labels.getString("eaccpf.relations.add.further.organisation"));
        //         addFurtherAgencyBtn.addActionListener(new AddFurtherAgency(this.eaccpf, this.tabbedPane, this.model,AddFurtherAgency.CPF,i));
        //         builder.add(addFurtherAgencyBtn, cc.xy(1, this.rowNb));
    }

    return builder;
}

From source file:eu.apenet.dpt.standalone.gui.eaccpf.EacCpfRelationsPanel.java

License:EUPL

/**
 * Method to build the relations with other EAC-CPF files.
 *
 * @param builder/*from  w  w  w  .j  a v a2 s  .c  o m*/
 * @param cc
 * @return the PanelBuilder
 */
private PanelBuilder buildCPFRelation(PanelBuilder builder, CellConstraints cc) {
    // Define values of the part.
    if (this.eaccpf.getCpfDescription().getRelations().getCpfRelation().isEmpty()) {
        if (this.eaccpf.getCpfDescription().getAlternativeSet() == null
                || (this.eaccpf.getCpfDescription().getAlternativeSet() != null
                        && this.eaccpf.getCpfDescription().getAlternativeSet().getSetComponent().isEmpty())) {
            this.eaccpf.getCpfDescription().getRelations().getCpfRelation().add(new CpfRelation());
        }
    }

    List<CpfRelation> cpfRelations = this.eaccpf.getCpfDescription().getRelations().getCpfRelation();

    for (int i = 0; i < cpfRelations.size(); i++) {
        // Set title.
        this.setNextRow();
        builder.addSeparator(this.labels.getString("eaccpf.relations.cpf.relation"), cc.xyw(1, this.rowNb, 7));
        this.setNextRow();

        CpfRelation cpfRelation = cpfRelations.get(i);

        // Create elements.
        TextFieldWithLanguage cpfRelationNameTf = null;
        JTextField cpfRelationIdentifierTf = null;
        TextFieldWithComboBoxEacCpf cpfRelationHrefAndTypeTf = null;
        TextAreaWithLanguage cpfRelationDescriptionTa = null;
        List<TextFieldWithLanguage> cpfRelationOrganisationNameAndIdTfList = new ArrayList<TextFieldWithLanguage>();

        // Recovers the values of the relation entry elements.
        String title = "";
        String other = "";
        String language = "";
        String id = "";
        List<String> agencyNameList = new ArrayList<String>();
        List<String> agencyCodeList = new ArrayList<String>();
        if (!cpfRelation.getRelationEntry().isEmpty()) {
            for (RelationEntry relationEntry : cpfRelation.getRelationEntry()) {
                // Title of the relation.
                // /eacCpf/cpfDescription/relations/cpfRelation/relationEntry@localType='title'
                if (StringUtils.isNotEmpty(relationEntry.getLocalType())
                        && relationEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_TITLE)
                        && StringUtils.isNotEmpty(relationEntry.getContent())) {
                    title = relationEntry.getContent();
                }
                // Id of the relation.
                // /eacCpf/cpfDescription/relations/cpfRelation/relationEntry@localType='id'
                if (StringUtils.isNotEmpty(relationEntry.getLocalType())
                        && relationEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_ID)
                        && StringUtils.isNotEmpty(relationEntry.getContent())) {
                    id = relationEntry.getContent();
                }

                // Agency name of the relation.
                // /eacCpf/cpfDescription/relations/cpfRelation/relationEntry@localType='agencyName'
                if (StringUtils.isNotEmpty(relationEntry.getLocalType())
                        && relationEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_AGENCYNAME)) {
                    agencyNameList.add(relationEntry.getContent());
                }

                // Agency code of the relation.
                // /eacCpf/cpfDescription/relations/cpfRelation/relationEntry@localType='agencyCode'
                if (StringUtils.isNotEmpty(relationEntry.getLocalType())
                        && relationEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_AGENCYCODE)) {
                    agencyCodeList.add(relationEntry.getContent());
                }

                // Texts of relation entries without @localType.
                // This texts will be loaded in field "name"
                if (StringUtils.isNotEmpty(relationEntry.getContent())
                        && StringUtils.isEmpty(relationEntry.getLocalType())) {
                    if (!other.isEmpty()) {
                        other = other + ". ";
                    }
                    other = other + relationEntry.getContent();
                }

                // Language of the relation.
                // /eacCpf/cpfDescription/relations/cpfRelation/relationEntry@lang
                if (StringUtils.isEmpty(language) && StringUtils.isNotEmpty(relationEntry.getLang())) {
                    language = relationEntry.getLang();
                }
            }
        } else if (StringUtils.isNotEmpty(firstLanguage) && StringUtils.isEmpty(cpfRelation.getHref())
                && StringUtils.isEmpty(cpfRelation.getCpfRelationType())
                && (cpfRelation.getDescriptiveNote() == null || (cpfRelation.getDescriptiveNote() != null
                        && cpfRelation.getDescriptiveNote().getP().isEmpty()))) {
            language = firstLanguage;
        }

        // Identifier of the relation.
        cpfRelationIdentifierTf = new JTextField(id);

        // Type and link of the relation.
        String type = "";
        String link = "";
        // /eacCpf/cpfDescription/relations/cpfRelation@cpfRelationType
        if (StringUtils.isNotEmpty(cpfRelation.getCpfRelationType())) {
            type = cpfRelation.getCpfRelationType();
        }
        // /eacCpf/cpfDescription/relations/cpfRelation@type
        if (StringUtils.isEmpty(type) && StringUtils.isNotEmpty(cpfRelation.getType())) {
            type = cpfRelation.getType();
        }
        // /eacCpf/cpfDescription/relations/cpfRelation@xlink:href
        if (StringUtils.isNotEmpty(cpfRelation.getHref())) {
            link = cpfRelation.getHref();
        }
        cpfRelationHrefAndTypeTf = new TextFieldWithComboBoxEacCpf(link, type,
                TextFieldWithComboBoxEacCpf.TYPE_CPF_RELATION, this.entityType, this.labels);

        // Descriptive note.
        // /eacCpf/cpfDescription/relations/cpfRelation/descriptiveNote
        // Currently only recovers the content of the first value.
        String descriptiveNote = "";
        if (cpfRelation.getDescriptiveNote() != null && !cpfRelation.getDescriptiveNote().getP().isEmpty()
                && StringUtils.isNotEmpty(cpfRelation.getDescriptiveNote().getP().get(0).getContent())) {
            descriptiveNote = cpfRelation.getDescriptiveNote().getP().get(0).getContent();
            if (StringUtils.isEmpty(language)) {
                language = cpfRelation.getDescriptiveNote().getP().get(0).getLang();
            }
        }
        cpfRelationDescriptionTa = new TextAreaWithLanguage(descriptiveNote, "", 1);

        // Name and language of the relation.
        if (title.isEmpty()) {
            title = other;
        }
        cpfRelationNameTf = new TextFieldWithLanguage(title, language);

        // Agency code and name of the relation.
        int size = 0;
        if (agencyNameList.size() > agencyCodeList.size()) {
            size = agencyNameList.size();
        } else {
            size = agencyCodeList.size();
        }

        if (size == 0) {
            agencyNameList.add("");
            agencyCodeList.add("");
            size = 1;
        }

        for (int j = 0; j < size; j++) {
            String agencyName = "";
            String agencyCode = "";

            if (agencyNameList.size() > j) {
                agencyName = agencyNameList.get(j);
            }

            if (agencyCodeList.size() > j) {
                agencyCode = agencyCodeList.get(j);
            }

            TextFieldWithLanguage cpfRelationOrganisationNameAndIdTf = new TextFieldWithLanguage(agencyName,
                    language, agencyCode);
            cpfRelationOrganisationNameAndIdTfList.add(cpfRelationOrganisationNameAndIdTf);
        }

        // Add elements to the list.
        this.cpfRelationNameTfs.add(cpfRelationNameTf);
        this.cpfRelationIdentifierTfs.add(cpfRelationIdentifierTf);
        this.cpfRelationHrefAndTypeTfs.add(cpfRelationHrefAndTypeTf);
        this.cpfRelationDescriptionTas.add(cpfRelationDescriptionTa);

        this.cpfRelationOrganisationNameAndIdTfs.add(cpfRelationOrganisationNameAndIdTfList);

        // Add elements to the panel.
        // Name and language.
        builder.addLabel(this.labels.getString("eaccpf.relations.cpf.relation.name"), cc.xy(1, this.rowNb));
        builder.add(cpfRelationNameTf.getTextField(), cc.xy(3, this.rowNb));
        builder.addLabel(this.labels.getString("eaccpf.commons.select.language"), cc.xy(5, this.rowNb));
        builder.add(cpfRelationNameTf.getLanguageBox(), cc.xy(7, this.rowNb));

        // Identity.
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.cpf.relation.identifier"),
                cc.xy(1, this.rowNb));
        builder.add(cpfRelationIdentifierTf, cc.xy(3, this.rowNb));

        // Link and relation type.
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.link"), cc.xy(1, this.rowNb));
        builder.add(cpfRelationHrefAndTypeTf.getTextField(), cc.xy(3, this.rowNb));
        builder.addLabel(this.labels.getString("eaccpf.relations.relation.type") + "*", cc.xy(5, this.rowNb));
        builder.add(cpfRelationHrefAndTypeTf.getComboBox(), cc.xy(7, this.rowNb));

        // Agency part.
        // Title.
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.cpf.relation.organisation"),
                cc.xyw(1, this.rowNb, 7));

        for (int j = 0; j < size; j++) {
            // Name and identifier.
            this.setNextRow();
            builder.addLabel(this.labels.getString("eaccpf.relations.name"), cc.xy(1, this.rowNb));
            builder.add(cpfRelationOrganisationNameAndIdTfList.get(j).getTextField(), cc.xy(3, this.rowNb));
            builder.addLabel(this.labels.getString("eaccpf.relations.identifier"), cc.xy(5, this.rowNb));
            builder.add(cpfRelationOrganisationNameAndIdTfList.get(j).getExtraField(), cc.xy(7, this.rowNb));
        }

        // Description.
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.description"), cc.xy(1, this.rowNb));
        builder.add(cpfRelationDescriptionTa.getTextField(), cc.xyw(3, this.rowNb, 5));

        // Button to add new agency information.
        //         this.setNextRow();
        //         JButton addFurtherAgencyBtn = new ButtonTab(this.labels.getString("eaccpf.relations.add.further.organisation"));
        //         addFurtherAgencyBtn.addActionListener(new AddFurtherAgency(this.eaccpf, this.tabbedPane, this.model,AddFurtherAgency.CPF,i+this.eaccpf.getCpfDescription().getAlternativeSet().getSetComponent().size()));
        //         builder.add(addFurtherAgencyBtn, cc.xy(1, this.rowNb));
    }

    return builder;
}

From source file:eu.apenet.dpt.standalone.gui.eaccpf.EacCpfRelationsPanel.java

License:EUPL

private PanelBuilder buildResourceRelationForm(PanelBuilder builder, CellConstraints cc,
        ResourceRelation resourceRelation, int i) {
    // Set title.
    setNextRow();/*from   w  w w .  j  a  va2 s  .c  o m*/
    builder.addSeparator(this.labels.getString("eaccpf.relations.resources.relation"),
            cc.xyw(1, this.rowNb, 7));
    setNextRow();

    // Create elements.
    TextFieldWithLanguage resourceRelationNameTf = null;
    JTextField resourceRelationIdentifierTf = null;
    TextFieldWithComboBoxEacCpf resourceRelationHrefAndTypeTf = null;
    TextAreaWithLanguage resourceRelationDescriptionTa = null;
    List<TextFieldWithLanguage> resourceRelationOrganisationNameAndIdTfsList = new ArrayList<TextFieldWithLanguage>();

    // Recovers the values of the relation entry elements.
    String title = "";
    String other = "";
    String language = "";
    String id = "";
    List<String> agencyNameList = new ArrayList<String>();
    List<String> agencyCodeList = new ArrayList<String>();

    // Type and link of the relation.
    String type = "";
    String link = "";

    // Descriptive note.
    // /eacCpf/cpfDescription/relations/resourceRelation/descriptiveNote
    // Currently only recovers the content of the first value.
    String descriptiveNote = "";

    // Agency code and name of the relation.
    int size = 0;

    if (resourceRelation != null) {
        for (RelationEntry relationEntry : resourceRelation.getRelationEntry()) {
            // Title of the relation.
            // /eacCpf/cpfDescription/relations/resourceRelation/relationEntry@localType='title'
            if (StringUtils.isNotEmpty(relationEntry.getLocalType())
                    && relationEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_TITLE)
                    && StringUtils.isNotEmpty(relationEntry.getContent())) {
                title = relationEntry.getContent();
            }
            // Id of the relation.
            // /eacCpf/cpfDescription/relations/resourceRelation/relationEntry@localType='id'
            if (StringUtils.isNotEmpty(relationEntry.getLocalType())
                    && relationEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_ID)
                    && StringUtils.isNotEmpty(relationEntry.getContent())) {
                id = relationEntry.getContent();
            }

            // Agency name of the relation.
            // /eacCpf/cpfDescription/relations/resourceRelation/relationEntry@localType='agencyName'
            if (StringUtils.isNotEmpty(relationEntry.getLocalType())
                    && relationEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_AGENCYNAME)) {
                agencyNameList.add(relationEntry.getContent());
            }

            // Agency code of the relation.
            // /eacCpf/cpfDescription/relations/resourceRelation/relationEntry@localType='agencyCode'
            if (StringUtils.isNotEmpty(relationEntry.getLocalType())
                    && relationEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_AGENCYCODE)) {
                agencyCodeList.add(relationEntry.getContent());
            }

            // Texts of relation entries without @localType.
            // This texts will be loaded in field "name"
            if (StringUtils.isNotEmpty(relationEntry.getContent())
                    && StringUtils.isEmpty(relationEntry.getLocalType())) {
                if (!other.isEmpty()) {
                    other = other + ". ";
                }
                other = other + relationEntry.getContent();
            }

            // Language of the relation.
            // /eacCpf/cpfDescription/relations/resourceRelation/relationEntry@lang
            if (StringUtils.isEmpty(language) && StringUtils.isNotEmpty(relationEntry.getLang())) {
                language = relationEntry.getLang();
            }
        }

        // /eacCpf/cpfDescription/relations/resourceRelation@resourceRelationType
        if (StringUtils.isNotEmpty(resourceRelation.getResourceRelationType())) {
            type = resourceRelation.getResourceRelationType();
        }
        // /eacCpf/cpfDescription/relations/resourceRelation@type
        if (StringUtils.isEmpty(type) && StringUtils.isNotEmpty(resourceRelation.getType())) {
            type = resourceRelation.getType();
        }
        // /eacCpf/cpfDescription/relations/resourceRelation@xlink:href
        if (StringUtils.isNotEmpty(resourceRelation.getHref())) {
            link = resourceRelation.getHref();
        }

        if (resourceRelation.getDescriptiveNote() != null
                && !resourceRelation.getDescriptiveNote().getP().isEmpty()
                && StringUtils.isNotEmpty(resourceRelation.getDescriptiveNote().getP().get(0).getContent())) {
            descriptiveNote = resourceRelation.getDescriptiveNote().getP().get(0).getContent();
            if (StringUtils.isEmpty(language)) {
                language = resourceRelation.getDescriptiveNote().getP().get(0).getLang();
            }

        }

        // Name and language of the relation.
        if (title.isEmpty()) {
            title = other;
        }

        if (agencyNameList.size() > agencyCodeList.size()) {
            size = agencyNameList.size();
        } else {
            size = agencyCodeList.size();
        }

        if (size == 0) {
            agencyNameList.add("");
            agencyCodeList.add("");
            size = 1;
        }
    }

    if (StringUtils.isEmpty(language) && StringUtils.isNotEmpty(firstLanguage)
            && (resourceRelation != null && StringUtils.isEmpty(resourceRelation.getHref())
                    && StringUtils.isEmpty(resourceRelation.getResourceRelationType())
                    && (resourceRelation.getDescriptiveNote() == null
                            || (resourceRelation.getDescriptiveNote() != null
                                    && resourceRelation.getDescriptiveNote().getP().isEmpty())))
            || resourceRelation == null) {
        language = firstLanguage;
    }

    resourceRelationNameTf = new TextFieldWithLanguage(title, language);

    // Identifier of the relation.
    resourceRelationIdentifierTf = new JTextField(id);

    resourceRelationHrefAndTypeTf = new TextFieldWithComboBoxEacCpf(link, type,
            TextFieldWithComboBoxEacCpf.TYPE_RESOURCE_RELATION, this.entityType, this.labels);

    resourceRelationDescriptionTa = new TextAreaWithLanguage(descriptiveNote, "", 1);

    for (int j = 0; j < size; j++) {
        String agencyName = "";
        String agencyCode = "";

        if (agencyNameList.size() > j) {
            agencyName = agencyNameList.get(j);
        }

        if (agencyCodeList.size() > j) {
            agencyCode = agencyCodeList.get(j);
        }

        TextFieldWithLanguage resourceRelationOrganisationNameAndIdTf = new TextFieldWithLanguage(agencyName,
                language, agencyCode);
        resourceRelationOrganisationNameAndIdTfsList.add(resourceRelationOrganisationNameAndIdTf);
    }

    if (size == 0) {
        resourceRelationOrganisationNameAndIdTfsList.add(new TextFieldWithLanguage("", "", ""));
    }
    // Add elements to the list.
    this.resourceRelationNameTfs.add(resourceRelationNameTf);
    this.resourceRelationIdentifierTfs.add(resourceRelationIdentifierTf);
    this.resourceRelationHrefAndTypeTfs.add(resourceRelationHrefAndTypeTf);
    this.resourceRelationDescriptionTas.add(resourceRelationDescriptionTa);
    this.resourceRelationOrganisationNameAndIdTfs.put(Integer.valueOf(i),
            resourceRelationOrganisationNameAndIdTfsList);

    // Add elements to the panel.
    // Name and language.
    builder.addLabel(this.labels.getString("eaccpf.relations.resource.relation.name"), cc.xy(1, this.rowNb));
    builder.add(resourceRelationNameTf.getTextField(), cc.xy(3, this.rowNb));
    builder.addLabel(this.labels.getString("eaccpf.commons.select.language"), cc.xy(5, this.rowNb));
    builder.add(resourceRelationNameTf.getLanguageBox(), cc.xy(7, this.rowNb));

    // Identity.
    this.setNextRow();
    builder.addLabel(this.labels.getString("eaccpf.relations.resource.relation.identifier"),
            cc.xy(1, this.rowNb));
    builder.add(resourceRelationIdentifierTf, cc.xy(3, this.rowNb));

    // Link and relation type.
    this.setNextRow();
    builder.addLabel(this.labels.getString("eaccpf.relations.link"), cc.xy(1, this.rowNb));
    builder.add(resourceRelationHrefAndTypeTf.getTextField(), cc.xy(3, this.rowNb));
    builder.addLabel(this.labels.getString("eaccpf.relations.relation.type") + "*", cc.xy(5, this.rowNb));
    builder.add(resourceRelationHrefAndTypeTf.getComboBox(), cc.xy(7, this.rowNb));

    // Agency part.
    // Title.
    this.setNextRow();
    builder.addLabel(this.labels.getString("eaccpf.relations.resource.relation.organisation"),
            cc.xyw(1, this.rowNb, 7));

    if (size > 0) { //flag which control if has been counter a valid list or an empty list
        for (int j = 0; j < size; j++) {
            // Name and identifier.
            this.setNextRow();
            builder.addLabel(this.labels.getString("eaccpf.relations.name"), cc.xy(1, this.rowNb));
            builder.add(resourceRelationOrganisationNameAndIdTfsList.get(j).getTextField(),
                    cc.xy(3, this.rowNb));
            builder.addLabel(this.labels.getString("eaccpf.relations.identifier"), cc.xy(5, this.rowNb));
            builder.add(resourceRelationOrganisationNameAndIdTfsList.get(j).getExtraField(),
                    cc.xy(7, this.rowNb));
        }
    } else {
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.name"), cc.xy(1, this.rowNb));
        builder.add(resourceRelationOrganisationNameAndIdTfsList.get(0).getTextField(), cc.xy(3, this.rowNb));
        builder.addLabel(this.labels.getString("eaccpf.relations.identifier"), cc.xy(5, this.rowNb));
        builder.add(resourceRelationOrganisationNameAndIdTfsList.get(0).getExtraField(), cc.xy(7, this.rowNb));
    }

    // Description.
    this.setNextRow();
    builder.addLabel(this.labels.getString("eaccpf.relations.description"), cc.xy(1, this.rowNb));
    builder.add(resourceRelationDescriptionTa.getTextField(), cc.xyw(3, this.rowNb, 5));

    //      // Button to add new agency information.
    //      this.setNextRow();
    //      JButton addFurtherAgencyBtn = new ButtonTab(this.labels.getString("eaccpf.relations.add.further.organisation"));
    //      addFurtherAgencyBtn.addActionListener(new AddFurtherAgency(this.eaccpf, this.tabbedPane, this.model, AddFurtherAgency.RESOURCE, i));
    //      builder.add(addFurtherAgencyBtn, cc.xy(1, this.rowNb));

    return builder;
}

From source file:eu.apenet.dpt.standalone.gui.eaccpf.EacCpfRelationsPanel.java

License:EUPL

/**
 * Main method to build the section that contains the relations with other functions.
 *
 * @param builder/*w w w  . java2 s.  c om*/
 * @param cc
 * @return the PanelBuilder
 */
private PanelBuilder buildFunctionsRelationsSection(PanelBuilder builder, CellConstraints cc) {
    // Set section title.
    this.setNextRow();
    /*builder.addSeparator("", cc.xyw(1, this.rowNb, 7));
      this.setNextRow();
    builder.addLabel(this.labels.getString("eaccpf.relations.functions.section"), cc.xyw(1, this.rowNb, 7));
    this.setNextRow();*/

    // Define values of the part.
    if (this.eaccpf.getCpfDescription().getRelations().getFunctionRelation().isEmpty()) {
        this.eaccpf.getCpfDescription().getRelations().getFunctionRelation().add(new FunctionRelation());
    }

    List<FunctionRelation> functionRelations = this.eaccpf.getCpfDescription().getRelations()
            .getFunctionRelation();

    this.functionRelationNameTfs = new ArrayList<TextFieldWithLanguage>(functionRelations.size());
    this.functionRelationIdentifierTfs = new ArrayList<JTextField>(functionRelations.size());
    this.functionRelationHrefAndTypeTfs = new ArrayList<TextFieldWithComboBoxEacCpf>(functionRelations.size());
    this.functionRelationDescriptionTas = new ArrayList<TextAreaWithLanguage>(functionRelations.size());
    this.functionRelationOrganisationNameAndIdTfs = new HashMap<Integer, List<TextFieldWithLanguage>>(
            functionRelations.size());

    for (int i = 0; i < functionRelations.size(); i++) {
        // Set title.
        this.setNextRow();
        builder.addSeparator(this.labels.getString("eaccpf.relations.functions.relation"),
                cc.xyw(1, this.rowNb, 7));
        this.setNextRow();

        FunctionRelation functionRelation = functionRelations.get(i);

        // Create elements.
        TextFieldWithLanguage resourceRelationNameTf = null;
        JTextField resourceRelationIdentifierTf = null;
        TextFieldWithComboBoxEacCpf resourceRelationHrefAndTypeTf = null;
        TextAreaWithLanguage resourceRelationDescriptionTa = null;
        List<TextFieldWithLanguage> resourceRelationOrganisationNameAndIdTfsList = new ArrayList<TextFieldWithLanguage>();

        // Recovers the values of the relation entry elements.
        String title = "";
        String other = "";
        String language = "";
        String id = "";
        List<String> agencyNameList = new ArrayList<String>();
        List<String> agencyCodeList = new ArrayList<String>();
        if (!functionRelation.getRelationEntry().isEmpty()) {
            for (RelationEntry relationEntry : functionRelation.getRelationEntry()) {
                // Title of the relation.
                // /eacCpf/cpfDescription/relations/functionRelation/relationEntry@localType='title'
                if (StringUtils.isNotEmpty(relationEntry.getLocalType())
                        && relationEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_TITLE)
                        && StringUtils.isNotEmpty(relationEntry.getContent())) {
                    title = relationEntry.getContent();
                }
                // Id of the relation.
                // /eacCpf/cpfDescription/relations/functionRelation/relationEntry@localType='id'
                if (StringUtils.isNotEmpty(relationEntry.getLocalType())
                        && relationEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_ID)
                        && StringUtils.isNotEmpty(relationEntry.getContent())) {
                    id = relationEntry.getContent();
                }

                // Agency name of the relation.
                // /eacCpf/cpfDescription/relations/functionRelation/relationEntry@localType='agencyName'
                if (StringUtils.isNotEmpty(relationEntry.getLocalType())
                        && relationEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_AGENCYNAME)) {
                    agencyNameList.add(relationEntry.getContent());
                }

                // Agency code of the relation.
                // /eacCpf/cpfDescription/relations/functionRelation/relationEntry@localType='agencyCode'
                if (StringUtils.isNotEmpty(relationEntry.getLocalType())
                        && relationEntry.getLocalType().equals(EacCpfRelationsPanel.LOCALTYPE_AGENCYCODE)) {
                    agencyCodeList.add(relationEntry.getContent());
                }

                // Texts of relation entries without @localType.
                // This texts will be loaded in field "name"
                if (StringUtils.isNotEmpty(relationEntry.getContent())
                        && StringUtils.isEmpty(relationEntry.getLocalType())) {
                    if (!other.isEmpty()) {
                        other = other + ". ";
                    }
                    other = other + relationEntry.getContent();
                }

                // Language of the relation.
                // /eacCpf/cpfDescription/relations/functionRelation/relationEntry@lang
                if (StringUtils.isEmpty(language) && StringUtils.isNotEmpty(relationEntry.getLang())) {
                    language = relationEntry.getLang();
                }
            }
        } else if (StringUtils.isNotEmpty(firstLanguage) && StringUtils.isEmpty(functionRelation.getHref())
                && StringUtils.isEmpty(functionRelation.getFunctionRelationType())
                && (functionRelation.getDescriptiveNote() == null
                        || (functionRelation.getDescriptiveNote() != null
                                && functionRelation.getDescriptiveNote().getP().isEmpty()))) {
            language = firstLanguage;
        }

        // Identifier of the relation.
        resourceRelationIdentifierTf = new JTextField(id);

        // Type and link of the relation.
        String type = "";
        String link = "";
        // /eacCpf/cpfDescription/relations/functionRelation@functionRelationType
        if (StringUtils.isNotEmpty(functionRelation.getFunctionRelationType())) {
            type = functionRelation.getFunctionRelationType();
        }
        // /eacCpf/cpfDescription/relations/functionRelation@type
        if (StringUtils.isEmpty(type) && StringUtils.isNotEmpty(functionRelation.getType())) {
            type = functionRelation.getType();
        }
        // /eacCpf/cpfDescription/relations/functionRelation@xlink:href
        if (StringUtils.isNotEmpty(functionRelation.getHref())) {
            link = functionRelation.getHref();
        }
        resourceRelationHrefAndTypeTf = new TextFieldWithComboBoxEacCpf(link, type,
                TextFieldWithComboBoxEacCpf.TYPE_FUNCTION_RELATION, this.entityType, this.labels);

        // Descriptive note.
        // /eacCpf/cpfDescription/relations/functionRelation/descriptiveNote
        // Currently only recovers the content of the first value.
        String descriptiveNote = "";
        if (functionRelation.getDescriptiveNote() != null
                && !functionRelation.getDescriptiveNote().getP().isEmpty()
                && StringUtils.isNotEmpty(functionRelation.getDescriptiveNote().getP().get(0).getContent())) {
            descriptiveNote = functionRelation.getDescriptiveNote().getP().get(0).getContent();
            if (StringUtils.isEmpty(language)) {
                language = functionRelation.getDescriptiveNote().getP().get(0).getLang();
            }
        }
        resourceRelationDescriptionTa = new TextAreaWithLanguage(descriptiveNote, "", 1);

        // Name and language of the relation.
        if (title.isEmpty()) {
            title = other;
        }
        resourceRelationNameTf = new TextFieldWithLanguage(title, language);

        // Agency code and name of the relation.
        int size = 0;
        if (agencyNameList.size() > agencyCodeList.size()) {
            size = agencyNameList.size();
        } else {
            size = agencyCodeList.size();
        }

        if (size == 0) {
            agencyNameList.add("");
            agencyCodeList.add("");
            size = 1;
        }

        for (int j = 0; j < size; j++) {
            String agencyName = "";
            String agencyCode = "";

            if (agencyNameList.size() > j) {
                agencyName = agencyNameList.get(j);
            }

            if (agencyCodeList.size() > j) {
                agencyCode = agencyCodeList.get(j);
            }

            TextFieldWithLanguage resourceRelationOrganisationNameAndIdTf = new TextFieldWithLanguage(
                    agencyName, language, agencyCode);
            resourceRelationOrganisationNameAndIdTfsList.add(resourceRelationOrganisationNameAndIdTf);
        }

        // Add elements to the list.
        this.functionRelationNameTfs.add(resourceRelationNameTf);
        this.functionRelationIdentifierTfs.add(resourceRelationIdentifierTf);
        this.functionRelationHrefAndTypeTfs.add(resourceRelationHrefAndTypeTf);
        this.functionRelationDescriptionTas.add(resourceRelationDescriptionTa);
        this.functionRelationOrganisationNameAndIdTfs.put(Integer.valueOf(i),
                resourceRelationOrganisationNameAndIdTfsList);

        // Add elements to the panel.
        // Name and language.
        builder.addLabel(this.labels.getString("eaccpf.relations.function.relation.name"),
                cc.xy(1, this.rowNb));
        builder.add(resourceRelationNameTf.getTextField(), cc.xy(3, this.rowNb));
        builder.addLabel(this.labels.getString("eaccpf.commons.select.language"), cc.xy(5, this.rowNb));
        builder.add(resourceRelationNameTf.getLanguageBox(), cc.xy(7, this.rowNb));

        // Identity.
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.function.relation.identifier"),
                cc.xy(1, this.rowNb));
        builder.add(resourceRelationIdentifierTf, cc.xy(3, this.rowNb));

        // Link and relation type.
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.link"), cc.xy(1, this.rowNb));
        builder.add(resourceRelationHrefAndTypeTf.getTextField(), cc.xy(3, this.rowNb));
        builder.addLabel(this.labels.getString("eaccpf.relations.relation.type") + "*", cc.xy(5, this.rowNb));
        builder.add(resourceRelationHrefAndTypeTf.getComboBox(), cc.xy(7, this.rowNb));

        // Agency part.
        // Title.
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.function.relation.organisation"),
                cc.xyw(1, this.rowNb, 7));

        for (int j = 0; j < size; j++) {
            // Name and identifier.
            this.setNextRow();
            builder.addLabel(this.labels.getString("eaccpf.relations.name"), cc.xy(1, this.rowNb));
            builder.add(resourceRelationOrganisationNameAndIdTfsList.get(j).getTextField(),
                    cc.xy(3, this.rowNb));
            builder.addLabel(this.labels.getString("eaccpf.relations.identifier"), cc.xy(5, this.rowNb));
            builder.add(resourceRelationOrganisationNameAndIdTfsList.get(j).getExtraField(),
                    cc.xy(7, this.rowNb));
        }

        // Description.
        this.setNextRow();
        builder.addLabel(this.labels.getString("eaccpf.relations.description"), cc.xy(1, this.rowNb));
        builder.add(resourceRelationDescriptionTa.getTextField(), cc.xyw(3, this.rowNb, 5));

        // Button to add new agency information.
        //         this.setNextRow();
        //         JButton addFurtherAgencyBtn = new ButtonTab(this.labels.getString("eaccpf.relations.add.further.organisation"));
        //         addFurtherAgencyBtn.addActionListener(new AddFurtherAgency(this.eaccpf, this.tabbedPane, this.model, AddFurtherAgency.FUNCTION,i));
        //         builder.add(addFurtherAgencyBtn, cc.xy(1, this.rowNb));
    }

    // Button to add new resource relation.
    this.setNextRow();
    JButton addFurtherFunctionBtn = new ButtonTab(
            this.labels.getString("eaccpf.relations.add.further.function"));
    addFurtherFunctionBtn.addActionListener(new AddFurtherFunction(this.eaccpf, this.tabbedPane, this.model));
    builder.add(addFurtherFunctionBtn, cc.xy(1, this.rowNb));

    return builder;
}

From source file:eu.apenet.dpt.standalone.gui.eaccpf.EacCpfStartPanel.java

License:EUPL

/**
 * Builds and answer the editor's tab for the given layout.
 * @return the editor's panel//from   w w w  .j  a  va 2 s. co  m
 */
protected JComponent buildEditorPanel(List<String> errors) {
    if (errors == null)
        errors = new ArrayList<String>(0);
    else if (Utilities.isDev && errors.size() > 0) {
        LOG.info("Errors in form:");
        for (String error : errors) {
            LOG.info(error);
        }
    }
    FormLayout layout = new FormLayout("right:max(50dlu;p), 4dlu, 100dlu, 7dlu, right:p, 4dlu, max(100dlu;p)",
            EDITOR_ROW_SPEC);

    layout.setColumnGroups(new int[][] { { 1, 5 }, { 3, 7 } });
    PanelBuilder builder = new PanelBuilder(layout);
    builder.setDefaultDialogBorder();
    CellConstraints cc = new CellConstraints();

    LanguageDeclaration languageDeclaration = null;
    if (this.eaccpf.getControl().getLanguageDeclaration() == null) {
        languageDeclaration = new LanguageDeclaration();
        languageDeclaration.setLanguage(new Language());
        languageDeclaration.setScript(new Script());
        this.eaccpf.getControl().setLanguageDeclaration(languageDeclaration);
    }
    rowNb = 1;
    builder.addSeparator(labels.getString("eaccpf.start.title"), cc.xyw(1, rowNb, 7));
    this.setNextRow();
    // the radio button Panel
    builder.addLabel(labels.getString("eaccpf.start.createInstance") + "*" + ":", cc.xy(1, rowNb));
    this.radioBtnPanel = new JPanel();
    builder.add(makeCheckboxesType(), cc.xyw(3, rowNb, 5));
    this.setNextRow();
    builder.addLabel(labels.getString("eaccpf.start.text"), cc.xyw(1, rowNb, 5));
    this.setNextRow();
    //language
    builder.addLabel(labels.getString("eaccpf.start.language") + ":", cc.xy(1, rowNb));
    LanguageWithScript languageWithScript = new LanguageWithScript(
            languageDeclaration.getLanguage().getLanguageCode(),
            languageDeclaration.getScript().getScriptCode(), labels);
    this.languageWithScriptFirst = languageWithScript;
    builder.add(languageWithScript.getLanguageBox(), cc.xy(3, rowNb));
    //script
    builder.addLabel(labels.getString("eaccpf.start.script") + ":", cc.xy(5, rowNb));
    builder.add(languageWithScript.getScriptBox(), cc.xy(7, rowNb));
    this.setNextRow();
    builder.addSeparator("", cc.xyw(1, rowNb, 7));
    this.setNextRow();
    //exit button
    JButton exitBtn = new ButtonTab(labels.getString("eaccpf.commons.exit"));
    builder.add(exitBtn, cc.xy(5, rowNb));
    exitBtn.addActionListener(new ExitBtnAction());
    //Go button
    JButton goBtn = new ButtonTab(labels.getString("eaccpf.start.go"));
    goBtn.addActionListener(new GoBtnAction());
    builder.add(goBtn, cc.xy(7, rowNb));
    JScrollPane scrollPane;
    scrollPane = new JScrollPane(builder.getPanel());
    scrollPane.getVerticalScrollBar().setUnitIncrement(20);

    return scrollPane;
}

From source file:eu.apenet.dpt.standalone.gui.eag2012.EagAccessAndServicesPanel.java

License:EUPL

@Override
protected JComponent buildEditorPanel(List<String> errors) {
    if (errors == null)
        errors = new ArrayList<String>(0);
    else if (Utilities.isDev && errors.size() > 0) {
        LOG.info("Errors in form:");
        for (String error : errors) {
            LOG.info(error);/*from w  w  w  . j  a v a  2 s  .  c  om*/
        }
    }

    FormLayout layout = new FormLayout("right:max(50dlu;p), 4dlu, 100dlu, 7dlu, right:p, 4dlu, 100dlu",
            EDITOR_ROW_SPEC);

    layout.setColumnGroups(new int[][] { { 1, 3, 5, 7 } });
    PanelBuilder builder = new PanelBuilder(layout);

    builder.setDefaultDialogBorder();
    CellConstraints cc = new CellConstraints();

    rowNb = 1;

    Repository repository = eag.getArchguide().getDesc().getRepositories().getRepository().get(repositoryNb);

    //opening hours
    if (repository.getTimetable().getOpening().size() == 0) {
        repository.getTimetable().getOpening().add(new Opening());
    }
    openingHoursTfs = new ArrayList<TextAreaWithLanguage>(repository.getTimetable().getOpening().size());
    for (int i = 0; i < repository.getTimetable().getOpening().size(); i++) {
        Opening opening = repository.getTimetable().getOpening().get(i);
        //remove * from second ahead
        if (i == 0)
            builder.addLabel(labels.getString("eag2012.commons.openingHours") + "*", cc.xy(1, rowNb));
        else
            builder.addLabel(labels.getString("eag2012.commons.openingHours"), cc.xy(1, rowNb));

        TextAreaWithLanguage textAreaWithLanguage = new TextAreaWithLanguage(opening.getContent(),
                opening.getLang());
        openingHoursTfs.add(textAreaWithLanguage);
        builder.add(textAreaWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textAreaWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();
    }
    if (errors.contains("openingHoursTfs")) {
        builder.add(createErrorLabel(labels.getString("eag2012.errors.openingHours")), cc.xy(1, rowNb));
        setNextRow();
    }
    //add opening hours button
    JButton addOpeningHoursBtn = new ButtonTab(labels.getString("eag2012.commons.addOpeningHours"));
    builder.add(addOpeningHoursBtn, cc.xy(1, rowNb));
    addOpeningHoursBtn.addActionListener(new AddOpeningHoursBtnAction(eag, tabbedPane, model));
    setNextRow();

    if (repository.getTimetable().getClosing().size() == 0) {
        repository.getTimetable().getClosing().add(new Closing());
    }
    closingDatesTfs = new ArrayList<TextAreaWithLanguage>(repository.getTimetable().getClosing().size());
    for (Closing closing : repository.getTimetable().getClosing()) {
        builder.addLabel(labels.getString("eag2012.commons.closingDates"), cc.xy(1, rowNb));
        TextAreaWithLanguage textAreaWithLanguage = new TextAreaWithLanguage(closing.getContent(),
                closing.getLang());
        closingDatesTfs.add(textAreaWithLanguage);
        builder.add(textAreaWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textAreaWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();
    }
    JButton addClosingDatesBtn = new ButtonTab(labels.getString("eag2012.commons.addClosingDates"));
    builder.add(addClosingDatesBtn, cc.xy(1, rowNb));
    addClosingDatesBtn.addActionListener(new AddClosingDatesBtnAction(eag, tabbedPane, model));
    setNextRow();

    if (repository.getDirections().size() == 0)
        repository.getDirections().add(new Directions());
    travellingDirectionsTfs = new ArrayList<TextAreaWithLanguage>(repository.getDirections().size());
    for (Directions directions : repository.getDirections()) {
        builder.addLabel(labels.getString("eag2012.accessAndServices.travellingDirections"), cc.xy(1, rowNb));
        String str = "";
        String citation = "";
        for (Object obj : directions.getContent()) {
            if (obj instanceof String) {
                str += (String) obj;
            } else if (obj instanceof Citation) {
                citation += ((Citation) obj).getHref();
            }
        }
        TextAreaWithLanguage textAreaWithLanguage = new TextAreaWithLanguage(str, directions.getLang(),
                citation);
        travellingDirectionsTfs.add(textAreaWithLanguage);
        builder.add(textAreaWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textAreaWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();

        builder.addLabel(labels.getString("eag2012.accessAndServices.link"), cc.xy(1, rowNb));
        builder.add(textAreaWithLanguage.getExtraField(), cc.xy(3, rowNb));
        setNextRow();
        if (errors.contains("travellingDirectionsTfs")) {
            if (StringUtils.isNotBlank(textAreaWithLanguage.getExtraField().getText()) && !StringUtils
                    .startsWithAny(textAreaWithLanguage.getExtraField().getText(), webPrefixes)) {
                builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                        cc.xy(1, rowNb));
                setNextRow();
            }
        } else if (StringUtils.isNotBlank(textAreaWithLanguage.getExtraField().getText())
                && !StringUtils.startsWithAny(textAreaWithLanguage.getExtraField().getText(), webPrefixes)) {
            builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")), cc.xy(1, rowNb));
            setNextRow();
        }
    }

    JButton addTravellingDirectionsBtn = new ButtonTab(
            labels.getString("eag2012.accessAndServices.addTravellingDirections"));
    builder.add(addTravellingDirectionsBtn, cc.xy(1, rowNb));
    addTravellingDirectionsBtn.addActionListener(new AddTravellingDirectionsBtnAction(eag, tabbedPane, model));
    setNextRow();

    builder.addLabel(labels.getString("eag2012.commons.accessiblePublic") + "*", cc.xy(1, rowNb));
    if (Arrays.asList(yesOrNo).contains(repository.getAccess().getQuestion())) {
        accessiblePublicCombo.setSelectedItem(repository.getAccess().getQuestion());
    }
    builder.add(accessiblePublicCombo, cc.xy(3, rowNb));
    setNextRow();

    if (repository.getAccess().getRestaccess().size() == 0)
        repository.getAccess().getRestaccess().add(new Restaccess());
    restaccessTfs = new ArrayList<TextAreaWithLanguage>(repository.getAccess().getRestaccess().size());
    int last = repository.getAccess().getRestaccess().size() - 1;
    for (Restaccess restaccess : repository.getAccess().getRestaccess()) {
        builder.addLabel(labels.getString("eag2012.accessAndServices.accessRestrictions"), cc.xy(1, rowNb));
        TextAreaWithLanguage textAreaWithLanguage = new TextAreaWithLanguage(restaccess.getContent(),
                restaccess.getLang());
        restaccessTfs.add(textAreaWithLanguage);
        builder.add(textAreaWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textAreaWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();
        if (last-- == 0) {
            JButton addRestaccessBtn = new ButtonTab(
                    labels.getString("eag2012.commons.addFutherAccessInformation"));
            builder.add(addRestaccessBtn, cc.xy(1, rowNb));
            addRestaccessBtn.addActionListener(new AddRestaccessBtnAction(eag, tabbedPane, model));
            setNextRow();
        }
    }

    if (repository.getAccess().getTermsOfUse().size() == 0)
        repository.getAccess().getTermsOfUse().add(new TermsOfUse());
    termsOfUseTfs = new ArrayList<TextAreaWithLanguage>(repository.getAccess().getTermsOfUse().size());
    for (TermsOfUse termsOfUse : repository.getAccess().getTermsOfUse()) {
        builder.addLabel(labels.getString("eag2012.accessAndServices.termsOfUse"), cc.xy(1, rowNb));
        TextAreaWithLanguage textAreaWithLanguage = new TextAreaWithLanguage(termsOfUse.getContent(),
                termsOfUse.getLang(), termsOfUse.getHref());
        termsOfUseTfs.add(textAreaWithLanguage);
        builder.add(textAreaWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textAreaWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();

        builder.addLabel(labels.getString("eag2012.accessAndServices.link"), cc.xy(1, rowNb));
        builder.add(textAreaWithLanguage.getExtraField(), cc.xy(3, rowNb));
        setNextRow();
        if (errors.contains("termsOfUseTfs")) {
            if (StringUtils.isNotBlank(textAreaWithLanguage.getExtraField().getText()) && !StringUtils
                    .startsWithAny(textAreaWithLanguage.getExtraField().getText(), webPrefixes)) {
                builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                        cc.xy(1, rowNb));
                setNextRow();
            }
        } else if (StringUtils.isNotBlank(textAreaWithLanguage.getExtraField().getText())
                && !StringUtils.startsWithAny(textAreaWithLanguage.getExtraField().getText(), webPrefixes)) {
            builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")), cc.xy(1, rowNb));
            setNextRow();
        }
    }

    //ad further button
    JButton addTermsOfUseBtn = new ButtonTab(
            labels.getString("eag2012.accessAndServices.addFurtherTermsOfUse"));
    builder.add(addTermsOfUseBtn, cc.xy(1, rowNb));
    addTermsOfUseBtn.addActionListener(new addTermsOfUseBtnAction(eag, tabbedPane, model));
    setNextRow();

    builder.addLabel(labels.getString("eag2012.commons.disabledAccess") + "*", cc.xy(1, rowNb));
    if (repository.getAccessibility().size() > 0
            && Arrays.asList(yesOrNo).contains(repository.getAccessibility().get(0).getQuestion())) {
        facilitiesForDisabledCombo.setSelectedItem(repository.getAccessibility().get(0).getQuestion());
    }
    builder.add(facilitiesForDisabledCombo, cc.xy(3, rowNb));
    setNextRow();

    //facilities for disabled persons
    accessibilityTfs = new ArrayList<TextAreaWithLanguage>(repository.getAccessibility().size());
    for (Accessibility accessibility : repository.getAccessibility()) {
        builder.addLabel(labels.getString("eag2012.commons.disabledAccess.facilities"), cc.xy(1, rowNb));
        TextAreaWithLanguage textAreaWithLanguage = new TextAreaWithLanguage(accessibility.getContent(),
                accessibility.getLang());
        accessibilityTfs.add(textAreaWithLanguage);
        builder.add(textAreaWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textAreaWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        if (last-- == 0) {
            JButton addAccessibilityBtn = new ButtonTab(
                    labels.getString("eag2012.yourinstitution.addInfoOnExistingFacilities"));
            builder.add(addAccessibilityBtn, cc.xy(7, rowNb));
            addAccessibilityBtn.addActionListener(new AddAccessibilityBtnAction(eag, tabbedPane, model));
        }
        setNextRow();
    }

    //add button
    JButton addFacilitiesForDisabledBtn = new ButtonTab(
            labels.getString("eag2012.accessAndServices.addFurtherFacilitiesForDisabled"));
    builder.add(addFacilitiesForDisabledBtn, cc.xy(1, rowNb));
    addFacilitiesForDisabledBtn
            .addActionListener(new addFacilitiesForDisabledBtnAction(eag, tabbedPane, model));
    setNextRow();

    builder.addSeparator(labels.getString("eag2012.accessAndServices.searchroom"), cc.xyw(1, rowNb, 7));
    setNextRow();

    if (repository.getServices() == null)
        repository.setServices(new Services());
    if (repository.getServices().getSearchroom() == null)
        repository.getServices().setSearchroom(new Searchroom());
    Searchroom searchroom = repository.getServices().getSearchroom();

    if (searchroom.getContact() == null)
        searchroom.setContact(new Contact());

    //(searchroom.getContact().getTelephone()
    builder.addLabel(labels.getString("eag2012.commons.telephone"), cc.xy(1, rowNb));
    int i = 0;
    telephoneSearchroomTf = new ArrayList<JTextField>(searchroom.getContact().getTelephone().size());
    for (Telephone telephone : searchroom.getContact().getTelephone()) {
        JTextField telephoneTf = new JTextField(telephone.getContent());
        telephoneSearchroomTf.add(telephoneTf);
        builder.add(telephoneTf, cc.xy(3, rowNb));
        if (i++ == 0) {
            JButton addtelephoneSearchroomTfBtn = new ButtonTab(
                    labels.getString("eag2012.contact.addFurtherTelephoneNumbers"));
            addtelephoneSearchroomTfBtn
                    .addActionListener(new AddTelephoneSearchroomBtnAction(eag, tabbedPane, model));
            builder.add(addtelephoneSearchroomTfBtn, cc.xy(5, rowNb));
        }
        setNextRow();
    }
    if (searchroom.getContact().getTelephone().size() == 0) {
        JTextField telephoneTf = new JTextField();
        telephoneSearchroomTf.add(telephoneTf);
        builder.add(telephoneTf, cc.xy(3, rowNb));
        JButton addtelephoneSearchroomTfBtn = new ButtonTab(
                labels.getString("eag2012.contact.addFurtherTelephoneNumbers"));
        addtelephoneSearchroomTfBtn
                .addActionListener(new AddTelephoneSearchroomBtnAction(eag, tabbedPane, model));
        builder.add(addtelephoneSearchroomTfBtn, cc.xy(5, rowNb));
        setNextRow();
    }

    //searchroom.getContact().getEmail()
    emailSearchroomTf = new ArrayList<JTextField>(searchroom.getContact().getEmail().size());
    emailTitleSearchroomTf = new ArrayList<JTextField>(searchroom.getContact().getEmail().size());
    if (searchroom.getContact().getEmail().size() == 0)
        searchroom.getContact().getEmail().add(new Email());
    for (Email email : searchroom.getContact().getEmail()) {
        JTextField emailTf = new JTextField(email.getHref());
        JTextField emailTitleTf = new JTextField(email.getContent());
        emailSearchroomTf.add(emailTf);
        emailTitleSearchroomTf.add(emailTitleTf);
        builder.addLabel(labels.getString("eag2012.commons.email"), cc.xy(1, rowNb));
        builder.add(emailTf, cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(emailTitleTf, cc.xy(7, rowNb));
        setNextRow();
    }
    JButton addEmailSearchroomBtn = new ButtonTab(labels.getString("eag2012.commons.addEmail"));
    addEmailSearchroomBtn.addActionListener(new AddEmailSearchroomAction(eag, tabbedPane, model));
    builder.add(addEmailSearchroomBtn, cc.xy(1, rowNb));
    setNextRow();

    //searchroom.getWebpage()
    webpageSearchroomTf = new ArrayList<JTextField>(searchroom.getWebpage().size());
    webpageTitleSearchroomTf = new ArrayList<JTextField>(searchroom.getWebpage().size());
    if (searchroom.getWebpage().size() == 0)
        searchroom.getWebpage().add(new Webpage());
    for (Webpage webpage : searchroom.getWebpage()) {
        JTextField webpageTf = new JTextField(webpage.getHref());
        JTextField webpageTitleTf = new JTextField(webpage.getContent());
        webpageTitleSearchroomTf.add(webpageTitleTf);
        webpageSearchroomTf.add(webpageTf);
        builder.addLabel(labels.getString("eag2012.commons.webpage"), cc.xy(1, rowNb));
        builder.add(webpageTf, cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(webpageTitleTf, cc.xy(7, rowNb));
        setNextRow();
        if (errors.contains("webpageSearchroomTf")) {
            if (StringUtils.isNotBlank(webpageTf.getText())
                    && !StringUtils.startsWithAny(webpageTf.getText(), webPrefixes)) {
                builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                        cc.xyw(1, rowNb, 3));
                setNextRow();
            }
        } else if (StringUtils.isNotBlank(webpageTf.getText())
                && !StringUtils.startsWithAny(webpageTf.getText(), webPrefixes)) {
            builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                    cc.xyw(1, rowNb, 3));
            setNextRow();
        }
    }
    JButton addWebpageSearchroomBtn = new ButtonTab(labels.getString("eag2012.commons.addWebpage"));
    addWebpageSearchroomBtn.addActionListener(new AddWebpageSearchroomAction(eag, tabbedPane, model));
    builder.add(addWebpageSearchroomBtn, cc.xy(1, rowNb));
    setNextRow();

    if (searchroom.getWorkPlaces() == null)
        searchroom.setWorkPlaces(new WorkPlaces());
    builder.addLabel(labels.getString("eag2012.commons.workPlaces"), cc.xy(1, rowNb));
    try {
        workplacesSearchroomTf = new JTextField(searchroom.getWorkPlaces().getNum().getContent());
    } catch (NullPointerException npe) {
        workplacesSearchroomTf = new JTextField();
    }
    builder.add(workplacesSearchroomTf, cc.xy(3, rowNb));
    setNextRow();

    if (searchroom.getComputerPlaces() == null) {
        ComputerPlaces computerPlaces = new ComputerPlaces();
        Num num = new Num();
        num.setUnit("site");
        computerPlaces.setNum(num);
        searchroom.setComputerPlaces(computerPlaces);
    }
    builder.addLabel(labels.getString("eag2012.accessAndServices.computerPlaces"), cc.xy(1, rowNb));
    computerplacesSearchroomTf = new JTextField(searchroom.getComputerPlaces().getNum().getContent());
    builder.add(computerplacesSearchroomTf, cc.xy(3, rowNb));
    if (searchroom.getComputerPlaces().getDescriptiveNote() == null) {
        JButton addDescriptionBtn = new ButtonTab(labels.getString("eag2012.accessAndServices.addDescription"));
        builder.add(addDescriptionBtn, cc.xy(5, rowNb));
        addDescriptionBtn.addActionListener(new AddComputerplacesDescriptionBtnAction(eag, tabbedPane, model));
    }
    setNextRow();
    if (searchroom.getComputerPlaces().getDescriptiveNote() != null) {
        computerplacesDescriptionTfs = new ArrayList<TextFieldWithLanguage>(
                searchroom.getComputerPlaces().getDescriptiveNote().getP().size());
        for (P p : searchroom.getComputerPlaces().getDescriptiveNote().getP()) {
            builder.addLabel(labels.getString("eag2012.commons.computerplacesDescription"), cc.xy(1, rowNb));
            TextFieldWithLanguage textFieldWithLanguage = new TextFieldWithLanguage(p.getContent(),
                    p.getLang());
            computerplacesDescriptionTfs.add(textFieldWithLanguage);
            builder.add(textFieldWithLanguage.getTextField(), cc.xy(3, rowNb));
            builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
            builder.add(textFieldWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
            setNextRow();
        }
        JButton addDescriptionBtn = new ButtonTab(labels.getString("eag2012.accessAndServices.addDescription"));
        builder.add(addDescriptionBtn, cc.xy(5, rowNb));
        addDescriptionBtn.addActionListener(new AddComputerplacesDescriptionBtnAction(eag, tabbedPane, model));
        setNextRow();
    }

    if (searchroom.getMicrofilmPlaces() == null) {
        MicrofilmPlaces microfilmPlaces = new MicrofilmPlaces();
        Num num = new Num();
        num.setUnit("site");
        microfilmPlaces.setNum(num);
        searchroom.setMicrofilmPlaces(microfilmPlaces);
    }
    if (searchroom.getPhotographAllowance() == null) {
        searchroom.setPhotographAllowance(new PhotographAllowance());
    }
    builder.addLabel(labels.getString("eag2012.accessAndServices.microfilmPlaces"), cc.xy(1, rowNb));
    microfilmplacesSearchroomTf = new JTextField(searchroom.getMicrofilmPlaces().getNum().getContent());
    builder.add(microfilmplacesSearchroomTf, cc.xy(3, rowNb));
    builder.addLabel(labels.getString("eag2012.accessAndServices.photographAllowance"), cc.xy(5, rowNb));
    if (Arrays.asList(photographAllowance).contains(searchroom.getPhotographAllowance().getValue())) {
        photographAllowanceCombo.setSelectedItem(searchroom.getPhotographAllowance().getValue());
    } else {
        photographAllowanceCombo.setSelectedItem("---");
    }
    builder.add(photographAllowanceCombo, cc.xy(7, rowNb));
    setNextRow();

    if (searchroom.getReadersTicket().size() == 0)
        searchroom.getReadersTicket().add(new ReadersTicket());
    readersticketSearchroomTfs = new ArrayList<TextFieldWithLanguage>(searchroom.getReadersTicket().size());
    for (ReadersTicket readersTicket : searchroom.getReadersTicket()) {
        builder.addLabel(labels.getString("eag2012.accessAndServices.readersTicket"), cc.xy(1, rowNb));
        TextFieldWithLanguage textFieldWithLanguage = new TextFieldWithLanguage(readersTicket.getContent(),
                readersTicket.getLang(), readersTicket.getHref());
        readersticketSearchroomTfs.add(textFieldWithLanguage);
        builder.add(textFieldWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textFieldWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();

        builder.addLabel(labels.getString("eag2012.accessAndServices.link"), cc.xy(1, rowNb));
        builder.add(textFieldWithLanguage.getExtraField(), cc.xy(3, rowNb));
        setNextRow();
        if (errors.contains("readersticketSearchroomTfs")) {
            if (StringUtils.isNotBlank(textFieldWithLanguage.getExtraField().getText()) && !StringUtils
                    .startsWithAny(textFieldWithLanguage.getExtraField().getText(), webPrefixes)) {
                builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                        cc.xy(1, rowNb));
                setNextRow();
            }
        } else if (StringUtils.isNotBlank(textFieldWithLanguage.getExtraField().getText())
                && !StringUtils.startsWithAny(textFieldWithLanguage.getExtraField().getText(), webPrefixes)) {
            builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")), cc.xy(1, rowNb));
            setNextRow();
        }
    }
    JButton addReadersticketBtn = new ButtonTab(labels.getString("eag2012.accessAndServices.addReadersTicket"));
    builder.add(addReadersticketBtn, cc.xy(1, rowNb));
    addReadersticketBtn.addActionListener(new AddReadersticketBtnAction(eag, tabbedPane, model));
    setNextRow();

    if (searchroom.getAdvancedOrders().size() == 0)
        searchroom.getAdvancedOrders().add(new AdvancedOrders());
    advancedordersSearchroomTfs = new ArrayList<TextFieldWithLanguage>(searchroom.getAdvancedOrders().size());
    for (AdvancedOrders advancedOrders : searchroom.getAdvancedOrders()) {
        builder.addLabel(labels.getString("eag2012.accessAndServices.advancedOrders"), cc.xy(1, rowNb));
        TextFieldWithLanguage textFieldWithLanguage = new TextFieldWithLanguage(advancedOrders.getContent(),
                advancedOrders.getLang(), advancedOrders.getHref());
        advancedordersSearchroomTfs.add(textFieldWithLanguage);
        builder.add(textFieldWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textFieldWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();

        builder.addLabel(labels.getString("eag2012.accessAndServices.link"), cc.xy(1, rowNb));
        builder.add(textFieldWithLanguage.getExtraField(), cc.xy(3, rowNb));
        setNextRow();
        if (errors.contains("advancedordersSearchroomTfs")) {
            if (StringUtils.isNotBlank(textFieldWithLanguage.getExtraField().getText()) && !StringUtils
                    .startsWithAny(textFieldWithLanguage.getExtraField().getText(), webPrefixes)) {
                builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                        cc.xy(1, rowNb));
                setNextRow();
            }
        } else if (StringUtils.isNotBlank(textFieldWithLanguage.getExtraField().getText())
                && !StringUtils.startsWithAny(textFieldWithLanguage.getExtraField().getText(), webPrefixes)) {
            builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")), cc.xy(1, rowNb));
            setNextRow();
        }
    }
    JButton addAdvancedordersBtn = new ButtonTab(labels.getString("eag2012.control.advancedOrders"));
    builder.add(addAdvancedordersBtn, cc.xy(1, rowNb));
    addAdvancedordersBtn.addActionListener(new AddAdvancedordersBtnAction(eag, tabbedPane, model));
    setNextRow();

    if (searchroom.getResearchServices().size() == 0) {
        DescriptiveNote descriptiveNote = new DescriptiveNote();
        descriptiveNote.getP().add(new P());
        ResearchServices researchServices = new ResearchServices();
        researchServices.setDescriptiveNote(descriptiveNote);
        searchroom.getResearchServices().add(researchServices);
    }
    researchServicesSearchroomTfs = new ArrayList<TextFieldWithLanguage>(
            searchroom.getResearchServices().size());
    for (ResearchServices researchServices : searchroom.getResearchServices()) {
        if (researchServices.getDescriptiveNote() == null) {
            DescriptiveNote descriptiveNote = new DescriptiveNote();
            descriptiveNote.setP(new ArrayList<P>() {
                {
                    add(new P());
                }
            });
            researchServices.setDescriptiveNote(descriptiveNote);
        }
        builder.addLabel(labels.getString("eag2012.accessAndServices.researchServices"), cc.xy(1, rowNb));
        TextFieldWithLanguage textFieldWithLanguage = new TextFieldWithLanguage(
                researchServices.getDescriptiveNote().getP().get(0).getContent(),
                researchServices.getDescriptiveNote().getP().get(0).getLang());
        researchServicesSearchroomTfs.add(textFieldWithLanguage);
        builder.add(textFieldWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textFieldWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();
    }
    JButton addResearchservicesBtn = new ButtonTab(
            labels.getString("eag2012.accessAndServices.addResearchservices"));
    builder.add(addResearchservicesBtn, cc.xy(1, rowNb));
    addResearchservicesBtn.addActionListener(new AddResearchservicesBtnAction(eag, tabbedPane, model));
    setNextRow();

    builder.addSeparator(labels.getString("eag2012.accessAndServices.library"), cc.xyw(1, rowNb, 7));
    setNextRow();

    if (repository.getServices().getLibrary() == null)
        repository.getServices().setLibrary(new Library());
    Library library = repository.getServices().getLibrary();

    if (library.getContact() == null)
        library.setContact(new Contact());

    //LibrarygetContact().getTelephone()
    builder.addLabel(labels.getString("eag2012.commons.telephone"), cc.xy(1, rowNb));
    i = 0;
    telephoneLibraryTf = new ArrayList<JTextField>(library.getContact().getTelephone().size());
    for (Telephone telephone : library.getContact().getTelephone()) {
        JTextField telephoneTf = new JTextField(telephone.getContent());
        telephoneLibraryTf.add(telephoneTf);
        builder.add(telephoneTf, cc.xy(3, rowNb));
        if (i++ == 0) {
            JButton addtelephoneLibraryTfBtn = new ButtonTab(
                    labels.getString("eag2012.contact.addFurtherTelephoneNumbers"));
            addtelephoneLibraryTfBtn
                    .addActionListener(new addTelephoneLibraryTfBtnAction(eag, tabbedPane, model));
            builder.add(addtelephoneLibraryTfBtn, cc.xy(5, rowNb));
        }
        setNextRow();
    }
    if (library.getContact().getTelephone().size() == 0) {
        JTextField telephoneTf = new JTextField();
        telephoneLibraryTf.add(telephoneTf);
        builder.add(telephoneTf, cc.xy(3, rowNb));
        JButton addtelephoneLibraryTfBtn = new ButtonTab(
                labels.getString("eag2012.contact.addFurtherTelephoneNumbers"));
        addtelephoneLibraryTfBtn.addActionListener(new addTelephoneLibraryTfBtnAction(eag, tabbedPane, model));
        builder.add(addtelephoneLibraryTfBtn, cc.xy(5, rowNb));
        setNextRow();
    }

    //library.getContact().getEmail()
    emailLibraryTf = new ArrayList<JTextField>(library.getContact().getEmail().size());
    emailTitleLibraryTf = new ArrayList<JTextField>(library.getContact().getEmail().size());
    if (library.getContact().getEmail().size() == 0)
        library.getContact().getEmail().add(new Email());
    for (Email email : library.getContact().getEmail()) {
        JTextField emailTf = new JTextField(email.getHref());
        JTextField emailTitleTf = new JTextField(email.getContent());
        emailLibraryTf.add(emailTf);
        emailTitleLibraryTf.add(emailTitleTf);
        builder.addLabel(labels.getString("eag2012.commons.email"), cc.xy(1, rowNb));
        builder.add(emailTf, cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(emailTitleTf, cc.xy(7, rowNb));
        setNextRow();
    }
    JButton addEmailLibraryBtn = new ButtonTab(labels.getString("eag2012.commons.addEmail"));
    addEmailLibraryBtn.addActionListener(new AddEmailLibraryAction(eag, tabbedPane, model));
    builder.add(addEmailLibraryBtn, cc.xy(1, rowNb));
    setNextRow();

    //library.getWebpage()
    webpageLibraryTf = new ArrayList<JTextField>(library.getWebpage().size());
    webpageTitleLibraryTf = new ArrayList<JTextField>(library.getWebpage().size());
    if (library.getWebpage().size() == 0)
        library.getWebpage().add(new Webpage());
    for (Webpage webpage : library.getWebpage()) {
        JTextField webpageTf = new JTextField(webpage.getHref());
        JTextField webpageTitleTf = new JTextField(webpage.getContent());
        webpageTitleLibraryTf.add(webpageTitleTf);
        webpageLibraryTf.add(webpageTf);
        builder.addLabel(labels.getString("eag2012.commons.webpage"), cc.xy(1, rowNb));
        builder.add(webpageTf, cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(webpageTitleTf, cc.xy(7, rowNb));
        setNextRow();
        if (errors.contains("webpageLibraryTf")) {
            if (StringUtils.isNotBlank(webpageTf.getText())
                    && !StringUtils.startsWithAny(webpageTf.getText(), webPrefixes)) {
                builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                        cc.xyw(1, rowNb, 3));
                setNextRow();
            }
        } else if (StringUtils.isNotBlank(webpageTf.getText())
                && !StringUtils.startsWithAny(webpageTf.getText(), webPrefixes)) {
            builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                    cc.xyw(1, rowNb, 3));
            setNextRow();
        }
    }
    JButton addEbpageLibraryBtn = new ButtonTab(labels.getString("eag2012.commons.addWebpage"));
    addEbpageLibraryBtn.addActionListener(new AddWebpageLibraryAction(eag, tabbedPane, model));
    builder.add(addEbpageLibraryBtn, cc.xy(1, rowNb));
    setNextRow();

    if (library.getMonographicpub() == null) {
        Monographicpub monographicpub = new Monographicpub();
        Num num = new Num();
        num.setUnit("site");
        monographicpub.setNum(num);
        library.setMonographicpub(monographicpub);
    }
    if (library.getSerialpub() == null) {
        Serialpub serialpub = new Serialpub();
        Num num = new Num();
        num.setUnit("site");
        serialpub.setNum(num);
        library.setSerialpub(serialpub);
    }
    builder.addLabel(labels.getString("eag2012.accessAndServices.monographicPublication"), cc.xy(1, rowNb));
    monographicPubLibraryTf = new JTextField(library.getMonographicpub().getNum().getContent());
    builder.add(monographicPubLibraryTf, cc.xy(3, rowNb));
    builder.addLabel(labels.getString("eag2012.accessAndServices.serialPublication"), cc.xy(5, rowNb));
    serialPubLibraryTf = new JTextField(library.getSerialpub().getNum().getContent());
    builder.add(serialPubLibraryTf, cc.xy(7, rowNb));
    setNextRow();

    builder.addSeparator(labels.getString("eag2012.accessAndServices.internetAccess"), cc.xyw(1, rowNb, 7));
    setNextRow();

    // public Internet access
    if (repository.getServices().getInternetAccess() == null) {
        DescriptiveNote descriptiveNote = new DescriptiveNote();
        descriptiveNote.getP().add(new P());
        InternetAccess internetAccess = new InternetAccess();
        internetAccess.setDescriptiveNote(descriptiveNote);
        repository.getServices().setInternetAccess(internetAccess);
    }
    InternetAccess internetAccess = repository.getServices().getInternetAccess();
    internetAccessDescTfs = new ArrayList<TextFieldWithLanguage>(
            internetAccess.getDescriptiveNote().getP().size());
    for (P p : internetAccess.getDescriptiveNote().getP()) {
        TextFieldWithLanguage textFieldWithLanguage = new TextFieldWithLanguage(p.getContent(), p.getLang());
        internetAccessDescTfs.add(textFieldWithLanguage);
        builder.addLabel(labels.getString("eag2012.accessAndServices.description"), cc.xy(1, rowNb));
        builder.add(textFieldWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textFieldWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();
    }
    JButton addInternetAccessBtn = new ButtonTab(labels.getString("eag2012.isil.addInternetAccess"));
    builder.add(addInternetAccessBtn, cc.xy(1, rowNb));
    addInternetAccessBtn.addActionListener(new AddInternetAccessBtnAction(eag, tabbedPane, model));
    setNextRow();

    // technical services
    builder.addSeparator(labels.getString("eag2012.accessAndServices.technicalServices"), cc.xyw(1, rowNb, 7));
    setNextRow();
    builder.addSeparator(labels.getString("eag2012.accessAndServices.conservationLab"), cc.xyw(1, rowNb, 7));
    setNextRow();

    if (repository.getServices().getTechservices() == null)
        repository.getServices().setTechservices(new Techservices());
    if (repository.getServices().getTechservices().getRestorationlab() == null)
        repository.getServices().getTechservices().setRestorationlab(new Restorationlab());
    Restorationlab restorationlab = repository.getServices().getTechservices().getRestorationlab();

    if (restorationlab.getDescriptiveNote() == null)
        restorationlab.setDescriptiveNote(new DescriptiveNote());
    if (restorationlab.getDescriptiveNote().getP().size() == 0)
        restorationlab.getDescriptiveNote().getP().add(new P());

    // description for restoration
    descriptionRestorationServiceTfs = new ArrayList<TextFieldWithLanguage>(
            restorationlab.getDescriptiveNote().getP().size());
    for (P p : restorationlab.getDescriptiveNote().getP()) {
        TextFieldWithLanguage textFieldWithLanguage = new TextFieldWithLanguage(p.getContent(), p.getLang());
        descriptionRestorationServiceTfs.add(textFieldWithLanguage);
        builder.addLabel(labels.getString("eag2012.accessAndServices.description"), cc.xy(1, rowNb));
        builder.add(textFieldWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textFieldWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();
    }
    JButton addDescriptionRestorationBtn = new ButtonTab(
            labels.getString("eag2012.accessAndServices.addDescriptionTranslation"), true);
    builder.add(addDescriptionRestorationBtn, cc.xy(1, rowNb));
    addDescriptionRestorationBtn
            .addActionListener(new AddDescriptionRestorationBtnAction(eag, tabbedPane, model));
    setNextRow();

    if (restorationlab.getContact() == null)
        restorationlab.setContact(new Contact());

    //restorationlab.getContact().getTelephone()
    builder.addLabel(labels.getString("eag2012.commons.telephone"), cc.xy(1, rowNb));
    i = 0;
    telephoneRestorationlabTf = new ArrayList<JTextField>(restorationlab.getContact().getTelephone().size());
    for (Telephone telephone : restorationlab.getContact().getTelephone()) {
        JTextField telephoneTf = new JTextField(telephone.getContent());
        telephoneRestorationlabTf.add(telephoneTf);
        builder.add(telephoneTf, cc.xy(3, rowNb));
        if (i++ == 0) {
            JButton addtelephoneRestorationlabTfBtn = new ButtonTab(
                    labels.getString("eag2012.contact.addFurtherTelephoneNumbers"));
            addtelephoneRestorationlabTfBtn
                    .addActionListener(new AddTelephoneRestorationlabTfBtnAction(eag, tabbedPane, model));
            builder.add(addtelephoneRestorationlabTfBtn, cc.xy(5, rowNb));
        }
        setNextRow();
    }
    if (restorationlab.getContact().getTelephone().size() == 0) {
        JTextField telephoneTf = new JTextField();
        telephoneRestorationlabTf.add(telephoneTf);
        builder.add(telephoneTf, cc.xy(3, rowNb));
        JButton addtelephoneRestorationlabTfBtn = new ButtonTab(
                labels.getString("eag2012.contact.addFurtherTelephoneNumbers"));
        addtelephoneRestorationlabTfBtn
                .addActionListener(new AddTelephoneRestorationlabTfBtnAction(eag, tabbedPane, model));
        builder.add(addtelephoneRestorationlabTfBtn, cc.xy(5, rowNb));
        setNextRow();
    }

    //Restoration.getContact().getEmail()
    emailRestorationlabTf = new ArrayList<JTextField>(restorationlab.getContact().getEmail().size());
    emailTitleRestorationlabTf = new ArrayList<JTextField>(restorationlab.getContact().getEmail().size());
    if (restorationlab.getContact().getEmail().size() == 0)
        restorationlab.getContact().getEmail().add(new Email());
    for (Email email : restorationlab.getContact().getEmail()) {
        JTextField emailTf = new JTextField(email.getHref());
        JTextField emailTitleTf = new JTextField(email.getContent());
        emailRestorationlabTf.add(emailTf);
        emailTitleRestorationlabTf.add(emailTitleTf);
        builder.addLabel(labels.getString("eag2012.commons.email"), cc.xy(1, rowNb));
        builder.add(emailTf, cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(emailTitleTf, cc.xy(7, rowNb));
        setNextRow();
    }
    JButton addEmaiRestorationlabBtn = new ButtonTab(labels.getString("eag2012.commons.addEmail"));
    addEmaiRestorationlabBtn.addActionListener(new AddEmailRestorationAction(eag, tabbedPane, model));
    builder.add(addEmaiRestorationlabBtn, cc.xy(1, rowNb));
    setNextRow();

    //restorationlab.getWebpage()
    webpageRestorationlabTf = new ArrayList<JTextField>(restorationlab.getWebpage().size());
    webpageTitleRestorationlabTf = new ArrayList<JTextField>(restorationlab.getWebpage().size());
    if (restorationlab.getWebpage().size() == 0)
        restorationlab.getWebpage().add(new Webpage());
    for (Webpage webpage : restorationlab.getWebpage()) {
        JTextField webpageTf = new JTextField(webpage.getHref());
        JTextField webpageTitleTf = new JTextField(webpage.getContent());
        webpageTitleRestorationlabTf.add(webpageTitleTf);
        webpageRestorationlabTf.add(webpageTf);
        builder.addLabel(labels.getString("eag2012.commons.webpage"), cc.xy(1, rowNb));
        builder.add(webpageTf, cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(webpageTitleTf, cc.xy(7, rowNb));
        setNextRow();
        if (errors.contains("webpageRestorationlabTf")) {
            if (StringUtils.isNotBlank(webpageTf.getText())
                    && !StringUtils.startsWithAny(webpageTf.getText(), webPrefixes)) {
                builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                        cc.xyw(1, rowNb, 3));
                setNextRow();
            }
        } else if (StringUtils.isNotBlank(webpageTf.getText())
                && !StringUtils.startsWithAny(webpageTf.getText(), webPrefixes)) {
            builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                    cc.xyw(1, rowNb, 3));
            setNextRow();
        }
    }
    JButton addWebpageRestorationlabBtn = new ButtonTab(labels.getString("eag2012.commons.addWebpage"));
    addWebpageRestorationlabBtn.addActionListener(new AddWebpageRestorationAction(eag, tabbedPane, model));
    builder.add(addWebpageRestorationlabBtn, cc.xy(1, rowNb));
    setNextRow();

    builder.addSeparator(labels.getString("eag2012.accessAndServices.reproductionService"),
            cc.xyw(1, rowNb, 7));
    setNextRow();

    if (repository.getServices().getTechservices().getReproductionser() == null)
        repository.getServices().getTechservices().setReproductionser(new Reproductionser());
    Reproductionser reproductionser = repository.getServices().getTechservices().getReproductionser();

    if (reproductionser.getDescriptiveNote() == null)
        reproductionser.setDescriptiveNote(new DescriptiveNote());
    if (reproductionser.getDescriptiveNote().getP().size() == 0)
        reproductionser.getDescriptiveNote().getP().add(new P());

    descriptionReproductionServiceTfs = new ArrayList<TextFieldWithLanguage>(
            reproductionser.getDescriptiveNote().getP().size());
    for (P p : reproductionser.getDescriptiveNote().getP()) {
        TextFieldWithLanguage textFieldWithLanguage = new TextFieldWithLanguage(p.getContent(), p.getLang());
        descriptionReproductionServiceTfs.add(textFieldWithLanguage);
        builder.addLabel(labels.getString("eag2012.accessAndServices.description"), cc.xy(1, rowNb));
        builder.add(textFieldWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textFieldWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();
    }
    JButton addDescriptionReproductionBtn = new ButtonTab(
            labels.getString("eag2012.accessAndServices.addDescriptionTranslation"), true);
    builder.add(addDescriptionReproductionBtn, cc.xy(1, rowNb));
    addDescriptionReproductionBtn
            .addActionListener(new AddDescriptionReproductionBtnAction(eag, tabbedPane, model));
    setNextRow();

    if (reproductionser.getContact() == null)
        reproductionser.setContact(new Contact());

    builder.addLabel(labels.getString("eag2012.commons.telephone"), cc.xy(1, rowNb));
    i = 0;

    //reproductionser.getContact().getTelephone()
    telephoneReproductionServiceTf = new ArrayList<JTextField>(
            reproductionser.getContact().getTelephone().size());
    for (Telephone telephone : reproductionser.getContact().getTelephone()) {
        JTextField telephoneTf = new JTextField(telephone.getContent());
        telephoneReproductionServiceTf.add(telephoneTf);
        builder.add(telephoneTf, cc.xy(3, rowNb));
        if (i++ == 0) {
            JButton addtelephoneReproductionServiceTfBtn = new ButtonTab(
                    labels.getString("eag2012.contact.addFurtherTelephoneNumbers"));
            addtelephoneReproductionServiceTfBtn
                    .addActionListener(new AddTelephoneReproductionServiceTfBtnAction(eag, tabbedPane, model));
            builder.add(addtelephoneReproductionServiceTfBtn, cc.xy(5, rowNb));
        }
        setNextRow();
    }
    if (reproductionser.getContact().getTelephone().size() == 0) {
        JTextField telephoneTf = new JTextField();
        telephoneReproductionServiceTf.add(telephoneTf);
        builder.add(telephoneTf, cc.xy(3, rowNb));
        JButton addtelephoneRestorationlabTfBtn = new ButtonTab(
                labels.getString("eag2012.contact.addFurtherTelephoneNumbers"));
        addtelephoneRestorationlabTfBtn
                .addActionListener(new AddTelephoneReproductionServiceTfBtnAction(eag, tabbedPane, model));
        builder.add(addtelephoneRestorationlabTfBtn, cc.xy(5, rowNb));
        setNextRow();
    }

    //Reproductionser.getContact().getEmail()
    emailReproductionServiceTf = new ArrayList<JTextField>(reproductionser.getContact().getEmail().size());
    emailTitleReproductionServiceTf = new ArrayList<JTextField>(reproductionser.getContact().getEmail().size());
    if (reproductionser.getContact().getEmail().size() == 0)
        reproductionser.getContact().getEmail().add(new Email());
    for (Email email : reproductionser.getContact().getEmail()) {
        JTextField emailTf = new JTextField(email.getHref());
        JTextField emailTitleTf = new JTextField(email.getContent());
        emailReproductionServiceTf.add(emailTf);
        emailTitleReproductionServiceTf.add(emailTitleTf);
        builder.addLabel(labels.getString("eag2012.commons.email"), cc.xy(1, rowNb));
        builder.add(emailTf, cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(emailTitleTf, cc.xy(7, rowNb));
        setNextRow();
    }
    JButton addEmaiReproductionServiceBtn = new ButtonTab(labels.getString("eag2012.commons.addEmail"));
    addEmaiReproductionServiceBtn
            .addActionListener(new AddEmailReproductionServiceBtnAction(eag, tabbedPane, model));
    builder.add(addEmaiReproductionServiceBtn, cc.xy(1, rowNb));
    setNextRow();

    //reproductionser.getWebpage()
    webpageReproductionServiceTf = new ArrayList<JTextField>(reproductionser.getWebpage().size());
    webpageTitleReproductionServiceTf = new ArrayList<JTextField>(reproductionser.getWebpage().size());
    if (reproductionser.getWebpage().size() == 0)
        reproductionser.getWebpage().add(new Webpage());
    for (Webpage webpage : reproductionser.getWebpage()) {
        JTextField webpageTf = new JTextField(webpage.getHref());
        JTextField webpageTitleTf = new JTextField(webpage.getContent());
        webpageTitleReproductionServiceTf.add(webpageTitleTf);
        webpageReproductionServiceTf.add(webpageTf);
        builder.addLabel(labels.getString("eag2012.commons.webpage"), cc.xy(1, rowNb));
        builder.add(webpageTf, cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(webpageTitleTf, cc.xy(7, rowNb));
        setNextRow();
        if (errors.contains("webpageReproductionServiceTf")) {
            if (StringUtils.isNotBlank(webpageTf.getText())
                    && !StringUtils.startsWithAny(webpageTf.getText(), webPrefixes)) {
                builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                        cc.xyw(1, rowNb, 3));
                setNextRow();
            }
        } else if (StringUtils.isNotBlank(webpageTf.getText())
                && !StringUtils.startsWithAny(webpageTf.getText(), webPrefixes)) {
            builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                    cc.xyw(1, rowNb, 3));
            setNextRow();
        }
    }
    JButton addWebpageReproductionserBtn = new ButtonTab(labels.getString("eag2012.commons.addWebpage"));
    addWebpageReproductionserBtn.addActionListener(new AddWebpageReproductionserAction(eag, tabbedPane, model));
    builder.add(addWebpageReproductionserBtn, cc.xy(1, rowNb));
    setNextRow();

    builder.addLabel(labels.getString("eag2012.accessAndServices.microformServices"), cc.xy(1, rowNb));
    if (reproductionser.getMicroformser() == null)
        reproductionser.setMicroformser(new Microformser());
    if (Arrays.asList(yesOrNo).contains(reproductionser.getMicroformser().getQuestion())) {
        microformServicesCombo.setSelectedItem(reproductionser.getMicroformser().getQuestion());
    } else {
        microformServicesCombo.setSelectedItem("---");
    }
    builder.add(microformServicesCombo, cc.xy(3, rowNb));
    setNextRow();

    builder.addLabel(labels.getString("eag2012.accessAndServices.photographServices"), cc.xy(1, rowNb));
    if (reproductionser.getPhotographser() == null)
        reproductionser.setPhotographser(new Photographser());
    if (Arrays.asList(yesOrNo).contains(reproductionser.getPhotographser().getQuestion())) {
        photographServicesCombo.setSelectedItem(reproductionser.getPhotographser().getQuestion());
    } else {
        photographServicesCombo.setSelectedItem("---");
    }
    builder.add(photographServicesCombo, cc.xy(3, rowNb));
    setNextRow();

    builder.addLabel(labels.getString("eag2012.accessAndServices.digitalServices"), cc.xy(1, rowNb));
    if (reproductionser.getDigitalser() == null)
        reproductionser.setDigitalser(new Digitalser());
    if (Arrays.asList(yesOrNo).contains(reproductionser.getDigitalser().getQuestion())) {
        digitalServicesCombo.setSelectedItem(reproductionser.getDigitalser().getQuestion());
    } else {
        digitalServicesCombo.setSelectedItem("---");
    }
    builder.add(digitalServicesCombo, cc.xy(3, rowNb));
    setNextRow();

    builder.addLabel(labels.getString("eag2012.accessAndServices.photocopyServices"), cc.xy(1, rowNb));
    if (reproductionser.getPhotocopyser() == null)
        reproductionser.setPhotocopyser(new Photocopyser());
    if (Arrays.asList(yesOrNo).contains(reproductionser.getPhotocopyser().getQuestion())) {
        photocopyServicesCombo.setSelectedItem(reproductionser.getPhotocopyser().getQuestion());
    } else {
        photocopyServicesCombo.setSelectedItem("---");
    }
    builder.add(photocopyServicesCombo, cc.xy(3, rowNb));
    setNextRow();

    builder.addSeparator(labels.getString("eag2012.accessAndServices.recreationalServices"),
            cc.xyw(1, rowNb, 7));
    setNextRow();

    if (repository.getServices().getRecreationalServices() == null)
        repository.getServices().setRecreationalServices(new RecreationalServices());
    RecreationalServices recreationalServices = repository.getServices().getRecreationalServices();

    if (recreationalServices.getRefreshment() == null) {
        DescriptiveNote descriptiveNote = new DescriptiveNote();
        descriptiveNote.getP().add(new P());
        Refreshment refreshment = new Refreshment();
        refreshment.setDescriptiveNote(descriptiveNote);
        recreationalServices.setRefreshment(refreshment);
    }
    builder.addLabel(labels.getString("eag2012.accessAndServices.refreshment"), cc.xy(1, rowNb));
    refreshmentTf = new TextAreaWithLanguage(
            recreationalServices.getRefreshment().getDescriptiveNote().getP().get(0).getContent(),
            recreationalServices.getRefreshment().getDescriptiveNote().getP().get(0).getLang());
    builder.add(refreshmentTf.getTextField(), cc.xy(3, rowNb));
    builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
    builder.add(refreshmentTf.getLanguageBox(), cc.xy(7, rowNb));
    setNextRow();

    if (recreationalServices.getExhibition().size() == 0) {
        recreationalServices.getExhibition().add(new Exhibition());
    }
    exhibitionTfs = new ArrayList<TextAreaWithLanguage>(recreationalServices.getExhibition().size());
    for (Exhibition exhibition : recreationalServices.getExhibition()) {
        if (exhibition.getDescriptiveNote() == null) {
            DescriptiveNote descriptiveNote = new DescriptiveNote();
            descriptiveNote.getP().add(new P());
            exhibition.setDescriptiveNote(descriptiveNote);
            exhibition.setWebpage(new Webpage());
        }

        builder.addLabel(labels.getString("eag2012.accessAndServices.exhibition"), cc.xy(1, rowNb));
        if (exhibition.getWebpage() == null) {
            exhibition.setWebpage(new Webpage());
        }
        TextAreaWithLanguage exhibitionTf = new TextAreaWithLanguage(
                exhibition.getDescriptiveNote().getP().get(0).getContent(),
                exhibition.getDescriptiveNote().getP().get(0).getLang(), exhibition.getWebpage().getHref(),
                exhibition.getWebpage().getContent());
        exhibitionTfs.add(exhibitionTf);
        builder.add(exhibitionTf.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(exhibitionTf.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();

        builder.addLabel(labels.getString("eag2012.commons.webpage"), cc.xy(1, rowNb));
        builder.add(exhibitionTf.getExtraField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(exhibitionTf.getSecondExtraField(), cc.xy(7, rowNb));
        setNextRow();
        if (errors.contains("exhibitionTfs")) {
            if (StringUtils.isNotBlank(exhibitionTf.getExtraField().getText())
                    && !StringUtils.startsWithAny(exhibitionTf.getExtraField().getText(), webPrefixes)) {
                builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                        cc.xy(1, rowNb));
                setNextRow();
            }
        } else if (StringUtils.isNotBlank(exhibitionTf.getExtraField().getText())
                && !StringUtils.startsWithAny(exhibitionTf.getExtraField().getText(), webPrefixes)) {
            builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")), cc.xy(1, rowNb));
            setNextRow();
        }
    }
    JButton addExhibitionsBtn = new ButtonTab(labels.getString("eag2012.accessAndServices.addExhibitions"));
    builder.add(addExhibitionsBtn, cc.xy(1, rowNb));
    addExhibitionsBtn.addActionListener(new AddExhibitionsBtnAction(eag, tabbedPane, model));
    setNextRow();

    if (recreationalServices.getToursSessions().size() == 0) {
        recreationalServices.getToursSessions().add(new ToursSessions());
    }
    toursAndSessionsTfs = new ArrayList<TextAreaWithLanguage>(recreationalServices.getToursSessions().size());
    for (ToursSessions toursSessions : recreationalServices.getToursSessions()) {
        if (toursSessions.getDescriptiveNote() == null) {
            DescriptiveNote descriptiveNote = new DescriptiveNote();
            descriptiveNote.getP().add(new P());
            toursSessions.setDescriptiveNote(descriptiveNote);
            toursSessions.setWebpage(new Webpage());
        }
        builder.addLabel(labels.getString("eag2012.accessAndServices.toursAndSessions"), cc.xy(1, rowNb));
        if (toursSessions.getWebpage() == null) {
            toursSessions.setWebpage(new Webpage());
        }
        TextAreaWithLanguage textAreaWithLanguage = new TextAreaWithLanguage(
                toursSessions.getDescriptiveNote().getP().get(0).getContent(),
                toursSessions.getDescriptiveNote().getP().get(0).getLang(),
                toursSessions.getWebpage().getHref(), toursSessions.getWebpage().getContent());
        toursAndSessionsTfs.add(textAreaWithLanguage);
        builder.add(textAreaWithLanguage.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(textAreaWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();
        builder.addLabel(labels.getString("eag2012.commons.webpage"), cc.xy(1, rowNb));
        builder.add(textAreaWithLanguage.getExtraField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(textAreaWithLanguage.getSecondExtraField(), cc.xy(7, rowNb));
        setNextRow();
        if (errors.contains("toursAndSessionsTfs")) {
            if (StringUtils.isNotBlank(textAreaWithLanguage.getExtraField().getText()) && !StringUtils
                    .startsWithAny(textAreaWithLanguage.getExtraField().getText(), webPrefixes)) {
                builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                        cc.xy(1, rowNb));
                setNextRow();
            }
        } else if (StringUtils.isNotBlank(textAreaWithLanguage.getExtraField().getText())
                && !StringUtils.startsWithAny(textAreaWithLanguage.getExtraField().getText(), webPrefixes)) {
            builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")), cc.xy(1, rowNb));
            setNextRow();
        }
    }
    JButton addToursSessionsBtn = new ButtonTab(labels.getString("eag2012.accessAndServices.addToursSessions"));
    builder.add(addToursSessionsBtn, cc.xy(1, rowNb));
    addToursSessionsBtn.addActionListener(new AddToursSessionsBtnAction(eag, tabbedPane, model));
    setNextRow();

    if (recreationalServices.getOtherServices().size() == 0) {
        recreationalServices.getOtherServices().add(new OtherServices());
    }
    otherServicesTfs = new ArrayList<TextAreaWithLanguage>(recreationalServices.getOtherServices().size());
    for (OtherServices otherServices : recreationalServices.getOtherServices()) {
        if (otherServices.getDescriptiveNote() == null) {
            DescriptiveNote descriptiveNote = new DescriptiveNote();
            otherServices.setDescriptiveNote(descriptiveNote);
        }
        if (otherServices.getDescriptiveNote().getP().size() == 0) {
            otherServices.getDescriptiveNote().getP().add(new P());
        }
        if (otherServices.getWebpage() == null) {
            otherServices.setWebpage(new Webpage());
        }
        builder.addLabel(labels.getString("eag2012.accessAndServices.otherServices"), cc.xy(1, rowNb));
        TextAreaWithLanguage otherServicesTf = new TextAreaWithLanguage(
                otherServices.getDescriptiveNote().getP().get(0).getContent(),
                otherServices.getDescriptiveNote().getP().get(0).getLang(),
                otherServices.getWebpage().getHref(), otherServices.getWebpage().getContent());
        otherServicesTfs.add(otherServicesTf);
        builder.add(otherServicesTf.getTextField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
        builder.add(otherServicesTf.getLanguageBox(), cc.xy(7, rowNb));
        setNextRow();
        builder.addLabel(labels.getString("eag2012.commons.webpage"), cc.xy(1, rowNb));
        builder.add(otherServicesTf.getExtraField(), cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(otherServicesTf.getSecondExtraField(), cc.xy(7, rowNb));
        setNextRow();
        if (errors.contains("otherServicesTfs")) {
            if (StringUtils.isNotBlank(otherServicesTf.getExtraField().getText())
                    && !StringUtils.startsWithAny(otherServicesTf.getExtraField().getText(), webPrefixes)) {
                builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                        cc.xy(1, rowNb));
                setNextRow();
            }
        } else if (StringUtils.isNotBlank(otherServicesTf.getExtraField().getText())
                && !StringUtils.startsWithAny(otherServicesTf.getExtraField().getText(), webPrefixes)) {
            builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")), cc.xy(1, rowNb));
            setNextRow();
        }
    }
    JButton addOtherServicesBtn = new ButtonTab(labels.getString("eag2012.accessAndServices.addOtherServices"));
    builder.add(addOtherServicesBtn, cc.xy(1, rowNb));
    addOtherServicesBtn.addActionListener(new AddOtherServicesBtnAction(eag, tabbedPane, model));
    setNextRow();

    builder.addSeparator("", cc.xyw(1, rowNb, 7));
    setNextRow();

    JButton exitBtn = new ButtonTab(labels.getString("eag2012.commons.exit"));
    builder.add(exitBtn, cc.xy(1, rowNb));
    exitBtn.addActionListener(new ExitBtnAction(eag, tabbedPane, model));

    JButton previousTabBtn = new ButtonTab(labels.getString("eag2012.commons.previousTab"));
    builder.add(previousTabBtn, cc.xy(3, rowNb));
    previousTabBtn.addActionListener(new ChangeTabBtnAction(eag, tabbedPane, model, false));

    JButton nextTabBtn = new ButtonTab(labels.getString("eag2012.commons.nextTab"));
    builder.add(nextTabBtn, cc.xy(5, rowNb));
    nextTabBtn.addActionListener(new ChangeTabBtnAction(eag, tabbedPane, model, true));

    setNextRow();
    JButton saveBtn = new ButtonTab(labels.getString("eag2012.commons.save"));
    builder.add(saveBtn, cc.xy(5, rowNb));
    saveBtn.addActionListener(new SaveBtnAction(eag, tabbedPane, model));

    setNextRow();
    builder.addSeparator("", cc.xyw(1, rowNb, 7));
    setNextRow();
    JButton previousInstitutionTabBtn = new ButtonTab(labels.getString("eag2012.controls.previousInstitution"));
    previousInstitutionTabBtn.addActionListener(new PreviousInstitutionTabBtnAction(eag, tabbedPane, model));
    builder.add(previousInstitutionTabBtn, cc.xy(1, rowNb));
    JButton nextInstitutionTabBtn = new ButtonTab(labels.getString("eag2012.controls.nextInstitution"));
    nextInstitutionTabBtn.addActionListener(new NextInstitutionTabBtnAction(eag, tabbedPane, model));
    builder.add(nextInstitutionTabBtn, cc.xy(5, rowNb));

    // Define the change tab listener.
    this.removeChangeListener();
    this.tabbedPane.addChangeListener(new ChangeTabListener(this.eag, this.tabbedPane, this.model, 3));

    JPanel panel = builder.getPanel();
    KeyboardFocusManager.getCurrentKeyboardFocusManager()
            .addPropertyChangeListener(new FocusManagerListener(panel));
    return panel;
}

From source file:eu.apenet.dpt.standalone.gui.eag2012.EagContactPanel.java

License:EUPL

@Override
protected JComponent buildEditorPanel(List<String> errors) {
    if (errors == null)
        errors = new ArrayList<String>(0);
    else if (Utilities.isDev && errors.size() > 0) {
        LOG.info("Errors in form:");
        for (String error : errors) {
            LOG.info(error);//ww  w . j  av  a 2 s .  c o  m
        }
    }

    FormLayout layout = new FormLayout("right:max(50dlu;p), 4dlu, 100dlu, 7dlu, right:p, 4dlu, 100dlu",
            EDITOR_ROW_SPEC);

    layout.setColumnGroups(new int[][] { { 1, 3, 5, 7 } });
    PanelBuilder builder = new PanelBuilder(layout);

    builder.setDefaultDialogBorder();
    CellConstraints cc = new CellConstraints();

    rowNb = 1;

    Repository repository = eag.getArchguide().getDesc().getRepositories().getRepository().get(repositoryNb);

    if (repositoryNb > 0) {
        if (repository.getRepositoryRole() == null)
            repository.setRepositoryRole(new RepositoryRole());
        if (Arrays.asList(repositoryRoles).contains(repository.getRepositoryRole().getValue()))
            repositoryRoleTypeCombo.setSelectedItem(repository.getRepositoryRole().getValue());
        builder.addLabel(labels.getString("eag2012.commons.roleOfRepository"), cc.xy(1, rowNb));
        builder.add(repositoryRoleTypeCombo, cc.xy(3, rowNb));

        setNextRow();

        if (repository.getRepositoryName().size() == 0)
            repository.getRepositoryName().add(new RepositoryName());
        repositoryNameTfs = new ArrayList<TextFieldWithLanguage>(repository.getRepositoryName().size());
        for (RepositoryName repositoryName : repository.getRepositoryName()) {
            builder.addLabel(labels.getString("eag2012.commons.nameOfRepository"), cc.xy(1, rowNb));
            TextFieldWithLanguage textFieldWithLanguage = new TextFieldWithLanguage(repositoryName.getContent(),
                    repositoryName.getLang());
            repositoryNameTfs.add(textFieldWithLanguage);
            builder.add(textFieldWithLanguage.getTextField(), cc.xy(3, rowNb));
            builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
            builder.add(textFieldWithLanguage.getLanguageBox(), cc.xy(7, rowNb));
            setNextRow();
        }
        JButton addNewRepositoryNameBtn = new ButtonTab(
                labels.getString("eag2012.contact.addNameOfRepository"));
        addNewRepositoryNameBtn.addActionListener(new AddRepositoryNameAction(eag, tabbedPane, model));
        builder.add(addNewRepositoryNameBtn, cc.xy(3, rowNb));
        setNextRow();
    }

    //visitors address and postal address
    boolean hasMinimumOnePostalAddress = false;
    boolean hasMinimumOneVisitorAddress = false;
    locationFields = new ArrayList<LocationType>(repository.getLocation().size());

    //loop to load Visitors address
    for (Location location : repository.getLocation()) {
        if (location.getLocalType() != null && location.getLocalType().equals("visitors address")) {
            LocationType locationType = new LocationType(location);
            locationFields.add(locationType);
            if (hasMinimumOneVisitorAddress) {
                locationType.getLatitudeTf().setEnabled(false);
                locationType.getLongitudeTf().setEnabled(false);
            }
            builder.addSeparator(labels.getString("eag2012.commons.visitorsAddress"), cc.xyw(1, rowNb, 7));
            hasMinimumOneVisitorAddress = true;
            setNextRow();

            String mandatoryStar = "*";
            if (location != repository.getLocation().get(0))
                mandatoryStar = "";

            builder.addLabel(labels.getString("eag2012.commons.street") + mandatoryStar, cc.xy(1, rowNb));
            builder.add(locationType.getStreetTf().getTextField(), cc.xy(3, rowNb));
            builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
            builder.add(locationType.getStreetTf().getLanguageBox(), cc.xy(7, rowNb));
            if (errors.contains("streetTf") && StringUtils.isEmpty(locationType.getStreetTfValue())) {
                setNextRow();
                builder.add(createErrorLabel(labels.getString("eag2012.errors.street")), cc.xy(1, rowNb));
            }
            setNextRow();

            builder.addLabel(labels.getString("eag2012.commons.cityTownWithPostalcode") + mandatoryStar,
                    cc.xy(1, rowNb));
            builder.add(locationType.getCityTf().getTextField(), cc.xy(3, rowNb));
            builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
            builder.add(locationType.getCityTf().getLanguageBox(), cc.xy(7, rowNb));
            if (errors.contains("cityTf") && StringUtils.isEmpty(locationType.getCityTfValue())) {
                setNextRow();
                builder.add(createErrorLabel(labels.getString("eag2012.errors.city")), cc.xy(1, rowNb));
            }
            setNextRow();

            builder.addLabel(labels.getString("eag2012.contact.district"), cc.xy(1, rowNb));
            builder.add(locationType.getDistrictTf().getTextField(), cc.xy(3, rowNb));
            builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
            builder.add(locationType.getDistrictTf().getLanguageBox(), cc.xy(7, rowNb));
            setNextRow();

            builder.addLabel(labels.getString("eag2012.contact.countyLocalAuthority"), cc.xy(1, rowNb));
            builder.add(locationType.getCountyTf().getTextField(), cc.xy(3, rowNb));
            builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
            builder.add(locationType.getCountyTf().getLanguageBox(), cc.xy(7, rowNb));
            setNextRow();

            builder.addLabel(labels.getString("eag2012.contact.region"), cc.xy(1, rowNb));
            builder.add(locationType.getRegionTf().getTextField(), cc.xy(3, rowNb));
            builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
            builder.add(locationType.getRegionTf().getLanguageBox(), cc.xy(7, rowNb));
            setNextRow();

            builder.addLabel(labels.getString("eag2012.commons.country") + mandatoryStar, cc.xy(1, rowNb));
            builder.add(locationType.getCountryTf().getTextField(), cc.xy(3, rowNb));
            builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
            builder.add(locationType.getCountryTf().getLanguageBox(), cc.xy(7, rowNb));
            if (errors.contains("countryTf") && StringUtils.isEmpty(locationType.getCountryTfValue())) {
                setNextRow();
                builder.add(createErrorLabel(labels.getString("eag2012.errors.country")), cc.xy(1, rowNb));
            }
            setNextRow();

            builder.addLabel(labels.getString("eag2012.commons.latitude"), cc.xy(1, rowNb));
            locationType.getLatitudeTf()
                    .addFocusListener(new UpdateCoordsText(locationType, EagContactPanel.LATITUDE));
            builder.add(locationType.getLatitudeTf(), cc.xy(3, rowNb));
            builder.addLabel(labels.getString("eag2012.commons.longitude"), cc.xy(5, rowNb));
            locationType.getLongitudeTf()
                    .addFocusListener(new UpdateCoordsText(locationType, EagContactPanel.LONGITUDE));
            builder.add(locationType.getLongitudeTf(), cc.xy(7, rowNb));
            setNextRow();
        } // end if visitors address
    } //end loop to load Visitors address

    //add visitors address button
    if (hasMinimumOneVisitorAddress) {
        JButton addNewVisitorTranslationAddressBtn = new ButtonTab(
                labels.getString("eag2012.commons.addVisitorTranslationAddress"), true);
        addNewVisitorTranslationAddressBtn
                .addActionListener(new AddAddressAction(eag, tabbedPane, model, false));
        builder.add(addNewVisitorTranslationAddressBtn, cc.xy(3, rowNb));
        setNextRow();
    } else {
        JButton addNewVisitorAddressBtn = new ButtonTab(labels.getString("eag2012.commons.addVisitorAddress"));
        addNewVisitorAddressBtn.addActionListener(new AddAddressAction(eag, tabbedPane, model, false));
        builder.add(addNewVisitorAddressBtn, cc.xy(3, rowNb));
        setNextRow();
    }
    //end add visitors address button

    // loop to load Postal address
    for (Location location : repository.getLocation()) {
        if (location.getLocalType() != null && location.getLocalType().equals("postal address")) {
            LocationType locationType = new LocationType(location);
            locationFields.add(locationType);
            builder.addSeparator(labels.getString("eag2012.commons.postalAddress"), cc.xyw(1, rowNb, 7));
            hasMinimumOnePostalAddress = true;
            setNextRow();

            String mandatoryStar = "";

            builder.addLabel(labels.getString("eag2012.commons.street") + mandatoryStar, cc.xy(1, rowNb));
            builder.add(locationType.getStreetTf().getTextField(), cc.xy(3, rowNb));
            builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
            builder.add(locationType.getStreetTf().getLanguageBox(), cc.xy(7, rowNb));
            if (errors.contains("streetTf") && StringUtils.isEmpty(locationType.getStreetTfValue())) {
                setNextRow();
                builder.add(createErrorLabel(labels.getString("eag2012.errors.street")), cc.xy(1, rowNb));
            }
            setNextRow();

            builder.addLabel(labels.getString("eag2012.commons.cityTownWithPostalcode") + mandatoryStar,
                    cc.xy(1, rowNb));
            builder.add(locationType.getCityTf().getTextField(), cc.xy(3, rowNb));
            builder.addLabel(labels.getString("eag2012.commons.language"), cc.xy(5, rowNb));
            builder.add(locationType.getCityTf().getLanguageBox(), cc.xy(7, rowNb));
            if (errors.contains("cityTf") && StringUtils.isEmpty(locationType.getCityTfValue())) {
                setNextRow();
                builder.add(createErrorLabel(labels.getString("eag2012.errors.city")), cc.xy(1, rowNb));
            }
            setNextRow();
        } //end if postal address
    } // end loop to load Postal address

    //add postal address button
    if (hasMinimumOnePostalAddress) {
        JButton addNewPostalTranslationAddressBtn = new ButtonTab(
                labels.getString("eag2012.commons.addPostalTranslationAddress"), true);
        addNewPostalTranslationAddressBtn.addActionListener(new AddAddressAction(eag, tabbedPane, model, true));
        builder.add(addNewPostalTranslationAddressBtn, cc.xy(3, rowNb));
        setNextRow();
    } else {
        JButton addNewPostalAddressBtn = new ButtonTab(labels.getString("eag2012.commons.addPostalAddress"));
        addNewPostalAddressBtn.addActionListener(new AddAddressAction(eag, tabbedPane, model, true));
        builder.add(addNewPostalAddressBtn, cc.xy(3, rowNb));
        setNextRow();
    }
    //end add postal address button

    builder.addLabel(labels.getString("eag2012.commons.continent") + "*", cc.xy(1, rowNb));
    if (Arrays.asList(continents).contains(repository.getGeogarea().getValue())) {
        continentCombo.setSelectedItem(repository.getGeogarea().getValue());
    } else {
        continentCombo.setSelectedItem("Europe");
    }
    builder.add(continentCombo, cc.xy(3, rowNb));
    setNextRow();

    //getTelephone()
    builder.addLabel(labels.getString("eag2012.commons.telephone"), cc.xy(1, rowNb));
    int i = 0;
    telephoneTfs = new ArrayList<JTextField>(repository.getTelephone().size());
    for (Telephone telephone : repository.getTelephone()) {
        JTextField telephoneTf = new JTextField(telephone.getContent());
        telephoneTfs.add(telephoneTf);
        builder.add(telephoneTf, cc.xy(3, rowNb));
        if (i++ == 0) {
            JButton addTelephoneBtn = new ButtonTab(
                    labels.getString("eag2012.contact.addFurtherTelephoneNumbers"));
            addTelephoneBtn.addActionListener(new AddTelephoneAction(eag, tabbedPane, model));
            builder.add(addTelephoneBtn, cc.xy(5, rowNb));
        }
        setNextRow();
    }
    if (repository.getTelephone().size() == 0) {
        JTextField telephoneTf = new JTextField();
        telephoneTfs.add(telephoneTf);
        builder.add(telephoneTf, cc.xy(3, rowNb));
        JButton addTelephoneBtn = new ButtonTab(labels.getString("eag2012.contact.addFurtherTelephoneNumbers"));
        addTelephoneBtn.addActionListener(new AddTelephoneAction(eag, tabbedPane, model));
        builder.add(addTelephoneBtn, cc.xy(5, rowNb));
        setNextRow();
    }

    builder.addLabel(labels.getString("eag2012.contact.fax"), cc.xy(1, rowNb));
    i = 0;
    faxTfs = new ArrayList<JTextField>(repository.getFax().size());
    for (Fax fax : repository.getFax()) {
        JTextField faxTf = new JTextField(fax.getContent());
        faxTfs.add(faxTf);
        builder.add(faxTf, cc.xy(3, rowNb));
        if (i++ == 0) {
            JButton addFaxBtn = new ButtonTab(labels.getString("eag2012.contact.addFaxNumbers"));
            addFaxBtn.addActionListener(new AddFaxAction(eag, tabbedPane, model));
            builder.add(addFaxBtn, cc.xy(5, rowNb));
        }
        setNextRow();
    }
    if (repository.getFax().size() == 0) {
        JTextField faxTf = new JTextField();
        faxTfs.add(faxTf);
        builder.add(faxTf, cc.xy(3, rowNb));
        JButton addFaxBtn = new ButtonTab(labels.getString("eag2012.contact.addFaxNumbers"));
        addFaxBtn.addActionListener(new AddFaxAction(eag, tabbedPane, model));
        builder.add(addFaxBtn, cc.xy(5, rowNb));
        setNextRow();
    }

    //getEmail()
    emailTfs = new ArrayList<JTextField>(repository.getEmail().size());
    emailTitleTfs = new ArrayList<JTextField>(repository.getEmail().size());
    if (repository.getEmail().size() == 0)
        repository.getEmail().add(new Email());
    for (Email email : repository.getEmail()) {
        JTextField emailTf = new JTextField(email.getHref());
        JTextField emailTitleTf = new JTextField(email.getContent());
        emailTfs.add(emailTf);
        emailTitleTfs.add(emailTitleTf);
        builder.addLabel(labels.getString("eag2012.commons.email"), cc.xy(1, rowNb));
        builder.add(emailTf, cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(emailTitleTf, cc.xy(7, rowNb));
        setNextRow();
    }
    JButton addEmailBtn = new ButtonTab(labels.getString("eag2012.commons.addEmail"));
    addEmailBtn.addActionListener(new AddEmailAction(eag, tabbedPane, model));
    builder.add(addEmailBtn, cc.xy(1, rowNb));
    setNextRow();

    //getWebpage()
    webpageTfs = new ArrayList<JTextField>(repository.getWebpage().size());
    webpageTitleTfs = new ArrayList<JTextField>(repository.getWebpage().size());
    if (repository.getWebpage().size() == 0)
        repository.getWebpage().add(new Webpage());
    for (Webpage webpage : repository.getWebpage()) {
        JTextField webpageTf = new JTextField(webpage.getHref());
        JTextField webpageTitleTf = new JTextField(webpage.getContent());
        webpageTitleTfs.add(webpageTitleTf);
        webpageTfs.add(webpageTf);
        builder.addLabel(labels.getString("eag2012.commons.webpage"), cc.xy(1, rowNb));
        builder.add(webpageTf, cc.xy(3, rowNb));
        builder.addLabel(labels.getString("eag2012.commons.linkTitle"), cc.xy(5, rowNb));
        builder.add(webpageTitleTf, cc.xy(7, rowNb));
        setNextRow();
        if (errors.contains("webpageTfs")) {
            if (StringUtils.isNotBlank(webpageTf.getText())
                    && !StringUtils.startsWithAny(webpageTf.getText(), webPrefixes)) {
                builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                        cc.xyw(1, rowNb, 3));
                setNextRow();
            }
        } else if (StringUtils.isNotBlank(webpageTf.getText())
                && !StringUtils.startsWithAny(webpageTf.getText(), webPrefixes)) {
            builder.add(createErrorLabel(labels.getString("eag2012.errors.webpageProtocol")),
                    cc.xyw(1, rowNb, 3));
            setNextRow();
        }
    }
    JButton addWebpageBtn = new ButtonTab(labels.getString("eag2012.commons.addWebpage"));
    addWebpageBtn.addActionListener(new AddWebpageAction(eag, tabbedPane, model));
    builder.add(addWebpageBtn, cc.xy(1, rowNb));
    setNextRow();

    builder.addSeparator("", cc.xyw(1, rowNb, 7));
    setNextRow();

    JButton exitBtn = new ButtonTab(labels.getString("eag2012.commons.exit"));
    builder.add(exitBtn, cc.xy(1, rowNb));
    exitBtn.addActionListener(new ExitBtnAction(eag, tabbedPane, model));

    if (repositoryNb == 0) {
        JButton previousTabBtn = new ButtonTab(labels.getString("eag2012.commons.previousTab"));
        builder.add(previousTabBtn, cc.xy(3, rowNb));
        previousTabBtn.addActionListener(new ChangeTabBtnAction(eag, tabbedPane, model, false));
    }

    JButton nextTabBtn = new ButtonTab(labels.getString("eag2012.commons.nextTab"));
    builder.add(nextTabBtn, cc.xy(5, rowNb));
    nextTabBtn.addActionListener(new ChangeTabBtnAction(eag, tabbedPane, model, true));

    setNextRow();
    JButton saveBtn = new ButtonTab(labels.getString("eag2012.commons.save"));
    builder.add(saveBtn, cc.xy(5, rowNb));
    saveBtn.addActionListener(new SaveBtnAction(eag, tabbedPane, model));

    setNextRow();
    builder.addSeparator("", cc.xyw(1, rowNb, 7));
    setNextRow();
    JButton previousInstitutionTabBtn = new ButtonTab(labels.getString("eag2012.controls.previousInstitution"));
    previousInstitutionTabBtn.addActionListener(new PreviousInstitutionTabBtnAction(eag, tabbedPane, model));
    builder.add(previousInstitutionTabBtn, cc.xy(1, rowNb));
    JButton nextInstitutionTabBtn = new ButtonTab(labels.getString("eag2012.controls.nextInstitution"));
    nextInstitutionTabBtn.addActionListener(new NextInstitutionTabBtnAction(eag, tabbedPane, model));
    builder.add(nextInstitutionTabBtn, cc.xy(5, rowNb));

    // Define the change tab listener.
    this.removeChangeListener();
    this.tabbedPane.addChangeListener(
            new ChangeTabListener(this.eag, this.tabbedPane, this.model, 2, this.repositoryNb));

    JPanel panel = builder.getPanel();
    KeyboardFocusManager.getCurrentKeyboardFocusManager()
            .addPropertyChangeListener(new FocusManagerListener(panel));
    return panel;
}