package org.geosdi.geoplatform.core.binding;
import com.google.common.base.Preconditions;
import org.geosdi.geoplatform.core.model.GPFolder;
import org.geosdi.geoplatform.core.model.GPProject;
import java.util.function.Function;
/**
* @author Vito Salvia - CNR IMAA geoSDI Group
* @email vito.salvia@gmail.com
*/
public interface IGPFolderBinder<TO extends GPFolder, FROM extends GPFolder, B extends IGPFolderBinder>
extends IBinder<TO, FROM, IGPFolderBinder<TO, FROM, B>> {
/**
* @param projectCloned
* @return
*/
IGPFolderBinder<TO, FROM, B> withProjectCloned(GPProject projectCloned);
/**
* @param folderCloned
* @return
*/
IGPFolderBinder<TO, FROM, B> withParentCloned(GPFolder folderCloned);
class GPFolderBinder extends AbstractBinder<GPFolder, GPFolder, IGPFolderBinder<GPFolder, GPFolder, IGPFolderBinder>>
implements IGPFolderBinder<GPFolder, GPFolder, IGPFolderBinder> {
private GPProject projectCloned;
private GPFolder folderCloned;
protected GPFolderBinder(){super();}
public static IGPFolderBinder<GPFolder, GPFolder, IGPFolderBinder> newGPFolderBinder() {
return new GPFolderBinder();
}
protected void checkArguments() {
super.checkArguments();
Preconditions.checkNotNull(projectCloned, "The Project Parameter must not be null.");
// Preconditions.checkNotNull(folderCloned, "The Folder Parameter must not be null.");
}
/**
* @return
*/
@Override
public GPFolder bind() throws Exception {
this.checkArguments();
return new GPProjectFuncion().apply(from);
}
@Override
protected IGPFolderBinder<GPFolder, GPFolder, IGPFolderBinder> self() {
return this;
}
/**
* @param projectCloned
* @return
*/
@Override
public IGPFolderBinder<GPFolder, GPFolder, IGPFolderBinder> withProjectCloned(GPProject projectCloned) {
this.projectCloned = projectCloned;
return self();
}
/**
* @param folderCloned
* @return
*/
@Override
public IGPFolderBinder<GPFolder, GPFolder, IGPFolderBinder> withParentCloned(GPFolder folderCloned) {
this.folderCloned = folderCloned;
return self();
}
class GPProjectFuncion implements Function<GPFolder, GPFolder> {
/**
* Applies this function to the given argument.
*
* @param gpFolder the function argument
* @return the function result
*/
@Override
public GPFolder apply(GPFolder gpFolder) {
GPFolder gpFolderCloned = new GPFolder();
gpFolderCloned.setChecked(gpFolder.isChecked());
gpFolderCloned.setExpanded(gpFolder.isExpanded());
gpFolderCloned.setName(gpFolder.getName());
gpFolderCloned.setNumberOfDescendants(gpFolder.getNumberOfDescendants());
gpFolderCloned.setParent(gpFolder.getParent());
gpFolderCloned.setPosition(gpFolder.getPosition());
gpFolderCloned.setProject(projectCloned);
gpFolderCloned.setParent(folderCloned);
return gpFolderCloned;
}
}
}
}