/* * Copyright (C) 2014 Shashank Tulsyan * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package neembuu.release1.ui.linkpanel; import java.io.File; import java.io.IOException; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.LinkedList; import java.util.List; import javax.swing.JComboBox; import jpfm.VolumeVisibility; import jpfm.fs.SimpleReadOnlyFileSystem; import jpfm.mount.Mount; import jpfm.mount.MountFlags; import jpfm.mount.MountParams; import jpfm.mount.MountParamsBuilder; import jpfm.mount.Mounts; import jpfm.volume.CommonFileAttributesProvider; import jpfm.volume.vector.VectorRootDirectory; import neembuu.diskmanager.DiskManager; import neembuu.diskmanager.DiskManagerParams; import neembuu.diskmanager.DiskManagers; import neembuu.release1.UnprofessionalTroubleHandler; import neembuu.release1.api.RealFileProvider; import neembuu.release1.api.linkgroup.LinkGrouperResults; import neembuu.release1.api.linkgroup.TrialLinkGroup; import neembuu.release1.api.linkhandler.TrialLinkHandler; import neembuu.release1.api.linkparser.LinkParserResult; import neembuu.release1.api.ui.linkpanel.Graph; import neembuu.release1.api.ui.MainComponent; import neembuu.release1.api.ui.linkpanel.OpenableEUI; import neembuu.release1.api.ui.access.MinimalistFileSystem; import neembuu.release1.api.ui.access.RemoveFromUI; import neembuu.release1.api.ui.actions.ChangeDownloadModeAction; import neembuu.release1.api.ui.actions.ConnectionActions; import neembuu.release1.api.ui.actions.ExpandAction; import neembuu.release1.api.ui.actions.OpenAction; import neembuu.release1.api.ui.actions.VariantSelectionAction; import neembuu.release1.api.ui.linkpanel.VariantSelector; import neembuu.release1.api.ui.linkpanel.VariantSelector.Selectable; import neembuu.release1.defaultImpl.DummyMultiVariantTrialLinkHandler; import neembuu.release1.defaultImpl.LinkOrganizerImplTest; import neembuu.release1.defaultImpl.file.SimpleNeembuuFileCreator; import neembuu.release1.defaultImpl.linkgroup.LinkGrouperImpl; import neembuu.release1.defaultImpl.file.multiVariant.MultiVariantFileCreator; import neembuu.release1.defaultImpl.file.split.SplitMergeNeembuuFileCreator; import neembuu.release1.mountmanager.MinimalistFileSystem_Root; import neembuu.release1.ui.MainPanel; import neembuu.release1.ui.actions.ChangeDownloadModeActionImpl; import neembuu.release1.ui.actions.ConnectionActionsImpl; import neembuu.release1.ui.actions.ExpandActionImpl; import neembuu.release1.ui.actions.LinkActionsImpl; import neembuu.release1.ui.actions.MultiVariantOpenAction; import neembuu.release1.ui.actions.OpenActionImpl; import neembuu.release1.ui.actions.ReAddActionCallBackImpl; import neembuu.release1.ui.actions.SaveAction_forVariants; import neembuu.release1.ui.linkcontainer.LinksContainer; import neembuu.vfs.progresscontrol.DownloadSpeedProvider; /** * * @author Shashank Tulsyan */ public class TestGenericLinkPanel { private final MainPanel mp; private final LinksContainer luic1; private final MainComponent mainComponent; private final String fn = "test120k.rmvb", srcSplit = "J:\\neembuu\\realfiles\\test120k.rmvb"; public TestGenericLinkPanel(MainPanel mp, LinksContainer lc, MainComponent mainComponent) { this.mp = mp; this.luic1 = lc; this.mainComponent = mainComponent; } public OpenableEUI singleLink(){ final GenericLinkPanel lp = new GenericLinkPanel(); final OpenableEUI openableEUI = lp.openableEUI; Graph graph = new GraphImpl(lp.graphUIA); ProgressImpl progress = new ProgressImpl(lp.progressUIA,graph,ProgressImpl.Mode.OverallProgressUI); lp.init(graph, progress.progressProvider, VariantsImpl.makeDummy()); ConnectionActions connectionActions = new ConnectionActionsImpl(progress.progressProvider); ChangeDownloadModeAction changeDownloadModeAction = new ChangeDownloadModeActionImpl(lp.changeDownloadModeUIA); final RemoveFromUI removeFromUI = new RemoveFromUI() { @Override public void remove() { luic1.removeUI(openableEUI); } }; final LinkActionsImpl linkActionsImpl; LinkOrganizerImplTest.TrialLinkHandlerDummy trialLinkHandlerDummy = LinkOrganizerImplTest.make("XYZ EP - 09, When Aliens came to planet earth.rmvb"); SimpleNeembuuFileCreator fileCreator = new SimpleNeembuuFileCreator( /*trialLinkHandlerDummy*/null, null); OpenAction openAction = new OpenAction() { @Override public void close() {} @Override public void actionPerformed() { if(Math.random()>0.5d){ lp.closeActionUIA.openButton().setCaption("420p"); }else { lp.closeActionUIA.openButton().setCaption(null); }}}; linkActionsImpl = new LinkActionsImpl(null, lp.closeActionUIA, removeFromUI, mainComponent, fileCreator, openAction); linkActionsImpl.getReAdd().addCallBack(new ReAddActionCallBackImpl( lp.closeActionUIA, progress.progressProvider,changeDownloadModeAction,true)); ExpandAction expandAction = new ExpandActionImpl(lp.expandActionUIA,ExpandActionImpl.Mode.MultiVariantType); lp.initActions(expandAction, openAction, linkActionsImpl.getClose(), linkActionsImpl.getDelete(), linkActionsImpl.getReAdd(), linkActionsImpl.getSave(), null, connectionActions, changeDownloadModeAction); lp.closeActionUIA.fileNameLabel().setText(trialLinkHandlerDummy.tempDisplayName()); progress.progressProvider.progress().init(new FakeFileBeingDownloaded()); return openableEUI; } public OpenableEUI splitLink(){ GenericLinkPanel lp = new GenericLinkPanel(); final OpenableEUI openableEUI = lp.openableEUI; Graph graph = new GraphImpl(lp.graphUIA); ProgressImpl progress = new ProgressImpl(lp.progressUIA,graph,ProgressImpl.Mode.OverallProgressUI); lp.init(graph, progress.progressProvider,VariantsImpl.makeDummy()); ConnectionActions connectionActions = new ConnectionActionsImpl(progress.progressProvider); ChangeDownloadModeAction changeDownloadModeAction = new ChangeDownloadModeActionImpl(lp.changeDownloadModeUIA); final RemoveFromUI removeFromUI = new RemoveFromUI() { @Override public void remove() { luic1.removeUI(openableEUI); } }; final LinkActionsImpl linkActionsImpl; final ExpandAction expandAction = new ExpandActionImpl(lp.expandActionUIA,ExpandActionImpl.Mode.SplitLinkType); SplitMergeNeembuuFileCreator fileCreator = createSplitTypeForTest(); SaveAction_forVariants saveAction_forVariants = new SaveAction_forVariants(mainComponent, lp.progressUIA); OpenActionImpl openActionImpl = new OpenActionImpl(realFileProviderForSplit, mainComponent); linkActionsImpl = new LinkActionsImpl(null, lp.closeActionUIA, removeFromUI, mainComponent, fileCreator, openActionImpl); linkActionsImpl.getReAdd().addCallBack(openActionImpl); linkActionsImpl.getReAdd().addCallBack(new ReAddActionCallBackImpl( lp.closeActionUIA, progress.progressProvider, changeDownloadModeAction,true)); linkActionsImpl.getReAdd().addCallBack(new VariantProgressProvider(lp.progressUIA,saveAction_forVariants,null,null,true)); lp.initActions(expandAction, openActionImpl, linkActionsImpl.getClose(), linkActionsImpl.getDelete(), linkActionsImpl.getReAdd(), saveAction_forVariants/*plugging in customization : D*/, null, connectionActions, changeDownloadModeAction); lp.closeActionUIA.fileNameLabel().setText("<Test merge link>"); //linkActionsImpl.getClose().actionPerformed(null);// replicating user close (X) pressed action linkActionsImpl.getReAdd().actionPerformed(true);// replicating a user click on (+) re-add button return openableEUI; } public OpenableEUI multiVariantTypeLink(){ GenericLinkPanel lp = new GenericLinkPanel(); final OpenableEUI openableEUI = lp.openableEUI; Graph graph = new GraphImpl(lp.graphUIA); SaveAction_forVariants saveAction_forVariants = new SaveAction_forVariants(mainComponent, lp.progressUIA); VariantProgressProvider vpi = new VariantProgressProvider(lp.progressUIA,saveAction_forVariants,graph,lp.closeActionUIA,false); lp.init(graph, vpi, VariantsImpl.makeDummy()); ConnectionActions connectionActions = new ConnectionActionsImpl(vpi); ChangeDownloadModeAction changeDownloadModeAction = new ChangeDownloadModeActionImpl(lp.changeDownloadModeUIA); final RemoveFromUI removeFromUI = new RemoveFromUI() { @Override public void remove() { luic1.removeUI(openableEUI); } }; final LinkActionsImpl linkActionsImpl; final ExpandAction expandAction = new ExpandActionImpl(lp.expandActionUIA,ExpandActionImpl.Mode.MultiVariantType); MultiVariantFileCreator fileCreator = createMultiVariantTypeForTest(); MultiVariantOpenAction openAction = new MultiVariantOpenAction(realFileProviderMultiVariant, mainComponent, new DownloadSpeedProvider(){@Override public double getDownloadSpeed_KiBps(){return 256;}},null); linkActionsImpl = new LinkActionsImpl(null, lp.closeActionUIA, removeFromUI, mainComponent, fileCreator,openAction); linkActionsImpl.getReAdd().addCallBack(openAction); linkActionsImpl.getReAdd().addCallBack(new ReAddActionCallBackImpl( lp.closeActionUIA, vpi, changeDownloadModeAction,false)); linkActionsImpl.getReAdd().addCallBack(vpi); lp.initActions(expandAction, openAction, linkActionsImpl.getClose(), linkActionsImpl.getDelete(), linkActionsImpl.getReAdd(), saveAction_forVariants/*plugging in customization : D*/, null, connectionActions, changeDownloadModeAction); lp.closeActionUIA.fileNameLabel().setText("<Test merge link>"); //linkActionsImpl.getClose().actionPerformed(null);// replicating user close (X) pressed action linkActionsImpl.getReAdd().actionPerformed(true);// replicating a user click on (+) re-add button return openableEUI; } final RealFileProvider realFileProviderMultiVariant = new RealFileProvider() { @Override public File getRealFile(String... x) { String pth = mountLocation; for (String stringPath : x) { pth+=(File.separatorChar+stringPath); }return new File(pth); } }; final RealFileProvider realFileProviderForSplit = new RealFileProvider() { @Override public File getRealFile(String... x) { // the name of the virtual folder is comming same as the resultant merge return new File(mountLocation+"\\test120k.rmvb\\test120k.rmvb"); } }; private MultiVariantFileCreator createMultiVariantTypeForTest(){ final LinkedList<TrialLinkHandler> tlh = new LinkedList<TrialLinkHandler>(); tlh.add(new DummyMultiVariantTrialLinkHandler()); LinkGrouperImpl grouperImpl = new LinkGrouperImpl(); LinkGrouperResults results = grouperImpl.group(new LinkParserResult() { @Override public List<TrialLinkHandler> getFailedLinks() { return null; } @Override public List<TrialLinkHandler> results() { return tlh; } @Override public List<String> getFailedLines() {return null;} }); return new MultiVariantFileCreator(null/*results.complete_linkPackages().get(0)*/, arffs); } MinimalistFileSystem arffs = createFSforTest(); private SplitMergeNeembuuFileCreator createSplitTypeForTest(){ TrialLinkGroup trialLinkGroup = createSplitLinksForTest(); SplitMergeNeembuuFileCreator fileCreator = new SplitMergeNeembuuFileCreator( /*trialLinkGroup*/null, arffs); return fileCreator; } private TrialLinkGroup createSplitLinksForTest(){ final LinkedList<TrialLinkHandler> tlh = new LinkedList<TrialLinkHandler>(); tlh.add(LinkOrganizerImplTest.make(fn+".001").fakeSpeedTarget_inKiBps(50).fileSource(srcSplit+".001")); tlh.add(LinkOrganizerImplTest.make(fn+".002").fakeSpeedTarget_inKiBps(50).fileSource(srcSplit+".002")); tlh.add(LinkOrganizerImplTest.make(fn+".003").fakeSpeedTarget_inKiBps(50).fileSource(srcSplit+".003")); tlh.add(LinkOrganizerImplTest.make(fn+".004").fakeSpeedTarget_inKiBps(50).fileSource(srcSplit+".004")); LinkGrouperImpl grouperImpl = new LinkGrouperImpl(); LinkGrouperResults results = grouperImpl.group(new LinkParserResult() { @Override public List<TrialLinkHandler> getFailedLinks() { return null; } @Override public List<TrialLinkHandler> results() { return tlh; } @Override public List<String> getFailedLines() { return null; } }); return results.complete_linkPackages().get(0); } private final String mountLocation = "J:\\neembuu\\virtual\\mountloc"; private MinimalistFileSystem createFSforTest(){ UnprofessionalTroubleHandler troubleHandler = new UnprofessionalTroubleHandler(mainComponent,null); String basePath = null; try{ basePath = System.getProperty("java.io.tmpdir")+File.separator+"neembuu-release1"; System.err.println("BasePath="+basePath); Files.createDirectory(Paths.get(basePath)); }catch(FileAlreadyExistsException faee){ System.out.println("Temp location already exists"); }catch(IOException a){ throw new RuntimeException(a); } DiskManager diskManager = DiskManagers.getDefaultManager(new DiskManagerParams.Builder() .setBaseStoragePath(basePath) .build() ); VectorRootDirectory volume = new VectorRootDirectory(10, 3,CommonFileAttributesProvider.DEFAULT); SimpleReadOnlyFileSystem fs = new SimpleReadOnlyFileSystem(volume); try{ Mount mount = Mounts.mount(new MountParamsBuilder() //.set(MountParams.ParamType.LISTENER, this) .set(MountParams.ParamType.MOUNT_LOCATION, mountLocation)//.toString()) .set(MountParams.ParamType.FILE_SYSTEM, fs) .set(MountParams.ParamType.EXIT_ON_UNMOUNT, false) .set(MountParams.ParamType.VOLUME_VISIBILITY, VolumeVisibility.GLOBAL) .set(MountParams.ParamType.MOUNT_FLAGS, new MountFlags.Builder().build()) .build()); }catch(Exception a){ a.printStackTrace(); System.exit(-1); } return new MinimalistFileSystem_Root(volume, troubleHandler, diskManager, realFileProviderForSplit, fs); } }