Hi members of this forum:

I have this situation - a Scenario entity comprised of many Result
entities. And vice-versa.

I then add the first result to a sortedset, using Scenario.runScenario().

However when i add the second result object, in
Scenario.adjustResult(), the first one is overwritten.

Thanks for any help on this issue, Eder

-----------

Scenario.java
"
public class Scenario implements Comparable<Scenario> {

    public String title() {
        return getDescription();
    }

    @Column(allowsNull = "false")
    @Property()
    @Getter @Setter
    private String description;

    @Column(allowsNull = "false")
    @Property()
    @Getter
    @Setter
    private int simulationYear;

    @Column(allowsNull = "false")
    @Property()
    @Getter @Setter
    private ModelCategory modelCategory;

    //    @Property(hidden = Where.ANYWHERE)
    @Column(allowsNull = "true")
    @Property()
    @Getter @Setter
    private Result budget;

    @Persistent(table = "ScenarioResults")
    @Join(column = "scenario_id")
//    @Element(column = "res_id")
    @Element(column = "result_id")
    @Collection()
    @Getter @Setter
    @CollectionLayout(render = RenderType.EAGERLY)
    private SortedSet<Result> actuals = new TreeSet<Result>();

....
    public Scenario importSeihan(
            @Parameter(fileAccept = ".xlsx")
            @ParameterLayout(named="Excel spreadsheet")
            final Blob spreadsheet){
....
                        getBudget().getCords().add(qitem);
....
    }

    @Action()
    public Result runScenario(){

        getActuals().add(getBudget());

        return getBudget();
    }

    @Action()
    public Result adjustResult() {
        Date dNow = new Date();
        SimpleDateFormat ft =
                new SimpleDateFormat ("dd-MMMM-yyyy-HH:mm");

        /*final*/ Result adj = getBudget();
        String descr = getDescription() + "_adjust_" + ft.format(dNow)
+ "_[optional description]";
        adj.setDescription(descr);
        adj.setStatus(AdjustStatus.valueOf("InProgress").ordinal());

        getActuals().add(adj);

        return resultRepo.findByDescription(descr);
    }


    @Override
    public int compareTo(final Scenario other) {
        return org.apache.isis.applib.util.ObjectContracts.compare(this,
other, "description");
    }

    @Override
    public String toString() {
        return org.apache.isis.applib.util.ObjectContracts.toString(this,
"description");
    }

    @javax.inject.Inject
    private ResultRepository resultRepo;
}
"



ScenarioRepository.java
"
public class ScenarioRepository {
....
    @Programmatic
    public Scenario create(
            final String description,
            final int simulationYear,
            final ModelCategory modelcat) {
        final TitleBuffer buf = new TitleBuffer();

        Date dNow = new Date();
        SimpleDateFormat ft =
                new SimpleDateFormat ("dd-MMMM-yyyy-HH:mm");

        buf.append("SimYear-" + simulationYear + "_" + modelcat + "_Created-");
        buf.append(ft.format(dNow) + "_");
        buf.append(description);

        final Scenario scenario =
container.newTransientInstance(Scenario.class);
        scenario.setDescription(buf.toString());
        scenario.setSimulationYear(simulationYear);
        scenario.setModelCategory(modelcat);

        scenario.setBudget(
                resultRepository.create(
                        buf.toString() + " - Analysis Results",
                        simulationYear,
                        AdjustStatus.valueOf("Created").ordinal()));

        container.persistIfNotAlready(scenario);
        return scenario;
    }

    @Inject
    ResultRepository resultRepository;
}
"


Result.java
"
public class Result implements Comparable<Result> {

    @Title
    @Column(allowsNull = "false")
    @Property(maxLength = 120)
    @Getter @Setter
    private String description;

    public String getDescription(){

        return description;
    }

    @Column(allowsNull = "false")
    @Property()
    @Getter @Setter
    private int simulationYear;

    @Column(allowsNull = "false")
    @Property()
    @Getter @Setter
    private int status;

    @CollectionLayout(render = RenderType.EAGERLY, named = "Power Cord")
    private SortedSet<QuotaItem> cords = new TreeSet<QuotaItem>();

    @Collection()
    public SortedSet<QuotaItem> getCords() {

        return cords;
    }
    public void setCords(
            final SortedSet<QuotaItem> obj) {
        this.cords = obj;
    }

}


ResultRepository.java
"
public class ResultRepository {

    @Programmatic
    public Result create(
            final String description,
            final int simulationYear,
            final int status
    ) {
        final ComponentSeihan componentSeihan =
container.newTransientInstance(ComponentSeihan.class);

        componentSeihan.setDescription(description);
        componentSeihan.setSimulationYear(simulationYear);
        componentSeihan.setStatus(status);
        return componentSeihan;
    }
}
"
----

Reply via email to