001package conexp.fx.core.builder;
002
003/*
004 * #%L
005 * Concept Explorer FX
006 * %%
007 * Copyright (C) 2010 - 2023 Francesco Kriegel
008 * %%
009 * This program is free software: you can redistribute it and/or modify
010 * it under the terms of the GNU General Public License as
011 * published by the Free Software Foundation, either version 3 of the
012 * License, or (at your option) any later version.
013 * 
014 * This program is distributed in the hope that it will be useful,
015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
017 * GNU General Public License for more details.
018 * 
019 * You should have received a copy of the GNU General Public
020 * License along with this program.  If not, see
021 * <http://www.gnu.org/licenses/gpl-3.0.html>.
022 * #L%
023 */
024
025import conexp.fx.core.builder.Requests.Source;
026import conexp.fx.core.builder.Requests.Type;
027import conexp.fx.core.context.MatrixContext;
028import conexp.fx.core.util.IdGenerator;
029import conexp.fx.gui.ConExpFX;
030
031public abstract class Request<G, M> {
032
033  public final Type             type;
034  public final Source           src;
035  protected MatrixContext<G, M> context;
036
037  public Request(final Type type, final Source src) {
038    super();
039    if (!type.sources.contains(src))
040      throw new IllegalArgumentException();
041    this.type = type;
042    this.src = src;
043  }
044
045  public MatrixContext<G, M> createContext() {
046    context = new MatrixContext<G, M>(type.homogen);
047    return context;
048  }
049
050  public final MatrixContext<G, M> createContext(final MatrixContext.AutomaticMode automaticMode) {
051    context = new MatrixContext<G, M>(type.homogen, automaticMode);
052    return context;
053  }
054
055  public abstract void setContent() throws Exception;
056
057  public String getId() {
058    return type.title + " " + IdGenerator.getNextId(ConExpFX.instance);
059  }
060}