package org.netbeans.gradle.project;
import java.util.Collection;
import org.jtrim.property.PropertySource;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.gradle.project.util.CloseableAction;
import org.netbeans.gradle.project.util.CloseableActionContainer;
import org.netbeans.spi.project.ui.ProjectOpenedHook;
public final class GenericOpenHook extends ProjectOpenedHook {
private final CloseableActionContainer closeableActions;
private final Runnable openInitializer;
private GenericOpenHook(
CloseableActionContainer closeableActions,
Runnable openInitializer) {
this.closeableActions = closeableActions;
this.openInitializer = openInitializer;
}
public static ProjectOpenedHook create(
Collection<? extends PropertySource<? extends CloseableAction>> actionProperties,
Runnable openInitializer) {
ExceptionHelper.checkNotNullArgument(actionProperties, "actionProperties");
ExceptionHelper.checkNotNullArgument(openInitializer, "openInitializer");
CloseableActionContainer closeableActions = new CloseableActionContainer();
for (PropertySource<? extends CloseableAction> actionProperty: actionProperties) {
closeableActions.defineAction(actionProperty);
}
return new GenericOpenHook(closeableActions, openInitializer);
}
@Override
protected void projectOpened() {
closeableActions.open();
openInitializer.run();
}
@Override
protected void projectClosed() {
closeableActions.close();
}
}