Skip to content

Commit

Permalink
Add new lifecycle phase: load
Browse files Browse the repository at this point in the history
  • Loading branch information
Emil Forslund committed Mar 15, 2016
1 parent 1e86867 commit da1e432
Show file tree
Hide file tree
Showing 14 changed files with 114 additions and 320 deletions.
46 changes: 41 additions & 5 deletions src/main/java/com/speedment/component/Lifecyclable.java
Expand Up @@ -36,6 +36,14 @@ public interface Lifecyclable<T extends Lifecyclable<T>> {
* @return this of type T
*/
T initialize();

/**
* Loads this <code>Lifecyclable</code>. This method can be used to set
* load internal settings.
*
* @return this of type T
*/
T load();

/**
* Resolve is called when all the <code>Lifecyclables</code> has been
Expand Down Expand Up @@ -80,6 +88,17 @@ public interface Lifecyclable<T extends Lifecyclable<T>> {
default boolean isInitialized() {
return getState().is(State.INIITIALIZED);
}

/**
* Returns if this <code>Lifecyclable</code> is loaded.
*
* @return if this <code>Lifecyclable</code> is loaded
* @see #load()
* @see State#LOADED
*/
default boolean isLoaded() {
return getState().is(State.LOADED);
}

/**
* Returns if this <code>Lifecyclable</code> is resolved.
Expand Down Expand Up @@ -122,6 +141,7 @@ default boolean isStopped() {
*
* @see #CREATED
* @see #INIITIALIZED
* @see #LOADED
* @see #RESOLVED
* @see #STARTED
* @see #STOPPED
Expand All @@ -146,39 +166,55 @@ public enum State {
*/
INIITIALIZED,
/**
* The <code>Lifecyclable</code> has been initialized and resolved.
* The <code>Lifecyclable</code> has been initialized and loaded.
*
* The following method(s) has been called and has completed on the
* <code>Lifecyclable</code>:
* <ul>
* <li>{@link #initialize()}</li>
* <li>{@link #load()}</li>
* </ul>
*
*/
LOADED,
/**
* The <code>Lifecyclable</code> has been initialized, loaded and
* resolved.
*
* The following method(s) has been called and has completed on the
* <code>Lifecyclable</code>:
* <ul>
* <li>{@link #initialize()}</li>
* <li>{@link #load()}</li>
* <li>{@link #resolve()}</li>
* </ul>
*
*/
RESOLVED,
/**
* The <code>Lifecyclable</code> has been initialized, resolved and
* started.
* The <code>Lifecyclable</code> has been initialized, loaded, resolved
* and started.
*
* The following method(s) has been called and has completed on the
* <code>Lifecyclable</code>:
* <ul>
* <li>{@link #initialize()}</li>
* <li>{@link #load()}</li>
* <li>{@link #resolve()}</li>
* <li>{@link #start()}</li>
* </ul>
*
*/
STARTED,
/**
* The <code>Lifecyclable</code> has been initialized, resolved, started
* and stopped.
* The <code>Lifecyclable</code> has been initialized, loaded, resolved,
* started and stopped.
*
* The following method(s) has been called and has completed on the
* <code>Lifecyclable</code>:
* <ul>
* <li>{@link #initialize()}</li>
* <li>{@link #load()}</li>
* <li>{@link #resolve()}</li>
* <li>{@link #start()}</li>
* <li>{@link #stop()}</li>
Expand Down
Expand Up @@ -77,10 +77,10 @@ protected Class makeCodeGenModel(File file) {
.keys()
.collect(toSet());

final Method onInit = Method.of("onInit", VOID)
final Method onInit = Method.of("onLoad", VOID)
.protected_()
.add(OVERRIDE)
.add("super.onInit();")
.add("super.onLoad();")
.add("loadAndSetProject();");

final String methodName = "applyAndPut";
Expand Down
Expand Up @@ -75,6 +75,12 @@ public Manager<ENTITY> initialize() {
state = State.INIITIALIZED;
return this;
}

@Override
public Manager<ENTITY> load() {
state = State.LOADED;
return this;
}

@Override
public Manager<ENTITY> resolve() {
Expand Down
Expand Up @@ -52,51 +52,6 @@
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;
import static com.speedment.internal.core.stream.OptionalUtil.unwrap;
import static com.speedment.util.NullUtil.requireNonNulls;
import static java.util.Objects.requireNonNull;

/**
*
Expand Down
Expand Up @@ -49,6 +49,12 @@ public AbstractComponent initialize() {
state = State.INIITIALIZED;
return this;
}

@Override
public AbstractComponent load() {
state = State.LOADED;
return this;
}

@Override
public AbstractComponent resolve() {
Expand Down
Expand Up @@ -40,7 +40,6 @@
import com.speedment.license.Software;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import static java.util.Objects.requireNonNull;
import java.util.stream.Stream;
import static java.util.Objects.requireNonNull;

Expand Down
Expand Up @@ -25,6 +25,7 @@
* events for each <code>Lifecyclable</code> transition:
* <ul>
* <li>{@link #onInit()}</li>
* <li>{@link #onLoad()}</li>
* <li>{@link #onResolve()}</li>
* <li>{@link #onStart()}</li>
* <li>{@link #onStop()}</li>
Expand All @@ -34,6 +35,7 @@
* run-time:
* <ul>
* <li>{@link #setPreInitialize(java.lang.Runnable)}</li>
* <li>{@link #setPreLoad(java.lang.Runnable)}</li>
* <li>{@link #setPreResolve(java.lang.Runnable)}</li>
* <li>{@link #setPreStart(java.lang.Runnable)}</li>
* <li>{@link #setPreStop(java.lang.Runnable)}</li>
Expand All @@ -49,18 +51,24 @@
public abstract class AbstractLifecycle<T extends AbstractLifecycle<T>> implements Lifecyclable<T> {

private State state;
private Runnable preInit, preResolve, preStart, preStop, postStop;
private Runnable preInit, preLoad, preResolve, preStart, preStop, postStop;

public AbstractLifecycle() {
state = State.CREATED;
preInit = preResolve = preStart = preStop = postStop = NOTHING;
preInit = preLoad = preResolve = preStart = preStop = postStop = NOTHING;
}

/**
* This method is called by the {@link #initialize()} method to support easy
* over-riding.
*/
protected abstract void onInit();

/**
* This method is called by the {@link #load()} method to support easy
* over-riding.
*/
protected abstract void onLoad();

/**
* This method is called by the {@link #resolve()} method to support easy
Expand Down Expand Up @@ -98,13 +106,30 @@ public T initialize() {
state = State.INIITIALIZED;
return self();
}

@Override
public T load() {
if (getState() == State.CREATED) {
// Automatically call resolve() for conveniency
initialize();
}
getState().checkNextState(State.LOADED);
preLoad.run();
onLoad();
state = State.LOADED;
return self();
}

@Override
public T resolve() {
if (getState() == State.CREATED) {
// Automatically call resolve() for conveniency
initialize();
}
if (getState() == State.INIITIALIZED) {
// Automatically call load() for conveniency
load();
}
getState().checkNextState(State.RESOLVED);
preResolve.run();
onResolve();
Expand All @@ -119,7 +144,11 @@ public T start() {
initialize();
}
if (getState() == State.INIITIALIZED) {
// Automatically call init() for conveniency
// Automatically call load() for conveniency
load();
}
if (getState() == State.LOADED) {
// Automatically call resolve() for conveniency
resolve();
}
getState().checkNextState(State.STARTED);
Expand Down
Expand Up @@ -53,8 +53,8 @@ public DefaultSpeedmentApplicationLifecycle(File configFile) {
}

@Override
protected void onInit() {
super.onInit();
protected void onLoad() {
super.onLoad();
loadAndSetProject();
}

Expand Down
Expand Up @@ -328,6 +328,12 @@ protected void onInit() {
forEachManagerInSeparateThread(Manager::initialize);
forEachComponentInSeparateThread(Component::initialize);
}

@Override
protected void onLoad() {
forEachManagerInSeparateThread(Manager::load);
forEachComponentInSeparateThread(Component::load);
}

@Override
protected void onResolve() {
Expand Down
Expand Up @@ -21,8 +21,6 @@
import com.speedment.config.Document;
import com.speedment.exception.SpeedmentException;
import com.speedment.internal.core.stream.OptionalUtil;
import com.speedment.ui.config.trait.HasExpandedProperty;
import com.speedment.ui.config.trait.HasNameProperty;
import com.speedment.internal.ui.util.NumericProperty;
import com.speedment.internal.ui.util.SimpleNumericProperty;
import static com.speedment.internal.util.document.DocumentUtil.toStringHelper;
Expand Down
Expand Up @@ -60,11 +60,18 @@ protected PropertyEditor<T> createUndecoratedEditor() {
return createChoiceEditor(this, alternatives, converter);
}

private static <T> PropertyEditor<T> createChoiceEditor(AbstractPropertyItem<T, Property<T>> property, ObservableList<T> alternatives, StringConverter<T> converter) {
private static <T> PropertyEditor<T> createChoiceEditor(AbstractPropertyItem<T, Property<T>> item, ObservableList<T> alternatives, StringConverter<T> converter) {
final ComboBox<T> comboBox = new ComboBox<>(alternatives);
comboBox.setConverter(converter);

return new AbstractPropertyEditor<T, ComboBox<T>>(property, comboBox) {
final T selected = item.getValue();
if (selected == null) {
comboBox.getSelectionModel().clearSelection();
} else {
comboBox.getSelectionModel().select(item.getValue());
}

return new AbstractPropertyEditor<T, ComboBox<T>>(item, comboBox) {

@Override
protected ObservableValue<T> getObservableValue() {
Expand Down
2 changes: 0 additions & 2 deletions src/main/java/com/speedment/internal/ui/util/Loader.java
Expand Up @@ -16,7 +16,6 @@
*/
package com.speedment.internal.ui.util;

import com.speedment.component.UserInterfaceComponent;
import com.speedment.component.UserInterfaceComponent.Brand;
import com.speedment.internal.ui.UISession;
import com.speedment.exception.SpeedmentException;
Expand All @@ -29,7 +28,6 @@
import java.util.function.Consumer;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.image.Image;
import static com.speedment.util.NullUtil.requireNonNulls;

/**
Expand Down
Expand Up @@ -22,7 +22,6 @@
import com.speedment.config.db.Table;
import com.speedment.db.MetaResult;
import com.speedment.exception.SpeedmentException;
import com.speedment.field.ComparableField;
import com.speedment.field.trait.ComparableFieldTrait;
import com.speedment.field.trait.FieldTrait;
import com.speedment.field.trait.ReferenceFieldTrait;
Expand Down Expand Up @@ -205,6 +204,11 @@ public ENTITY remove(ENTITY entity, Consumer<MetaResult<ENTITY>> consumer) throw
public Manager<ENTITY> initialize() {
return inner.initialize();
}

@Override
public Manager<ENTITY> load() {
return inner.load();
}

@Override
public Manager<ENTITY> resolve() {
Expand All @@ -230,6 +234,11 @@ public State getState() {
public boolean isInitialized() {
return inner.isInitialized();
}

@Override
public boolean isLoaded() {
return inner.isLoaded();
}

@Override
public boolean isResolved() {
Expand Down

0 comments on commit da1e432

Please sign in to comment.