Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [tm-dev] Programatic Creation of Filters/Pools/References

Hi Daniel,

I tried the following and I didn't hit any problems:

if (subSystem.getName().equals("Sftp Files")) {
ISubSystemConfiguration config = subSystem.getSubSystemConfiguration();

// Get the Pool Manager for my profile type
ISystemFilterPoolManager poolManager = config.getFilterPoolManager(myProfile);
// Create the new filter Pool for my new filter (returns null if it already exists)
ISystemFilterPool pool = poolManager.getFirstDefaultSystemFilterPool();

if (pool != null) {
poolManager.createSystemFilter(pool, "MyFilter", new String[] {"/path/of/super/secret/resource/"});
}
}


You can use the default filter pool for your profile and I don't think you need to explicitly call addReferenceToSystemFilterPool().
____________________________________
David McKnight
Phone: 905-413-3902 , T/L: 969-3902
Internet: dmcknigh@xxxxxxxxxx
Mail: D1/YFY/8200/TOR
____________________________________


Inactive hide details for Daniel Johnson ---17/08/2011 10:53:48 AM---A filter must belong to a filter pool, and then subsystemsDaniel Johnson ---17/08/2011 10:53:48 AM---A filter must belong to a filter pool, and then subsystems make references to the filter pools, it i


From:

Daniel Johnson <danijoh2@xxxxxxxxx>

To:

Daniel Johnson <danijoh2@xxxxxxxxx>

Cc:

TM project developer discussions <tm-dev@xxxxxxxxxxx>, tm-dev-bounces@xxxxxxxxxxx

Date:

17/08/2011 10:53 AM

Subject:

Re: [tm-dev] Programatic Creation of Filters/Pools/References

Sent by:

tm-dev-bounces@xxxxxxxxxxx




A filter must belong to a filter pool, and then subsystems make references to the filter pools, it is up to the user to actually show the filter pool or not.
http://help.eclipse.org/indigo/topic/org.eclipse.rse.doc.isv/guide/Model.html
-- Dan

On Aug 16, 2011, at 5:35 PM, Daniel Johnson wrote:
      Hello All,

      I have attached four screenshots to help clarify what I am seeing.

      The first screenshot is after adding my two server proxies, it shows that the Filter Pools are being created correctly and that everything behaves correctly. Both servers refer to a common "*** Server Hosts:ssh.files" Filter Pool, and then each has its own Filter Pool, "MyServer:ssh.files" and "My2ndServer:ssh.files" respectively.

      The second screenshot is right when I open up Eclipse, showing the NPE I encounter, right away you can see the decoraters are messed up in the RSE view.

      The third screenshot is opening the "Select Filter Pools" dialog on My2ndServer, and seeing that now only the "My2ndServer:ssh.files" Filter Pool has been loaded successfully.

      Further, if I then add a new proxy, "MyThirdServer", then suddenly the common Filter Pool "*** Server Hosts:ssh.files" starts working for all three servers, but the "MyServer:ssh.files" Filter Pool is still unresolved, as seen in the fourth screenshot.

      I debugged the code and addReferenceToSystemFilterPool(pool) does a .commit() of the whole profile, and while debugging the commit it correctly stepped through every Filter Pool Reference.

      It is starting to seem like it is actually a problem with persisting the Filter Pools themselves, as the Filter Pool References seem to work again as soon as the Filter Pool is re-created.

      I should also note that the common Filter Pool works fine between servers as long as I remove this code for adding the unique pool.

      Finally, here is some updated code:
      -------------------------------------------------------------------------------
      String hostName = ... // Get host name
      String username = ... // Get username

      // Create MyProfile
      ISystemRegistry systemRegistry = RSECorePlugin.getTheSystemRegistry();
      ISystemProfile myProfile = systemRegistry.getSystemProfile("MyProfile");
      if (myProfile == null) {
      myProfile = systemRegistry.createSystemProfile("MyProfile", true);
      }

      // Create the host
      IHost host = systemRegistry.getHost(myProfile, hostName);
      if (host == null) {
      // Create with SSH to add the SFTP subsystem
      host = systemRegistry.createHost(myProfile.getName(), systemRegistry.getSystemTypeById(IRSESystemType.SYSTEMTYPE_SSH_ONLY_ID), hostName, hostName, "MyProfile Description");
      host.setDefaultUserId(username);
      }

      // Create the XMP_HOME filter in the Remote Systems Explorer view
      for (ISubSystem subSystem : host.getSubSystems()) {
      if (subSystem.getName().equals("Sftp Files")) {
      ISubSystemConfiguration config = subSystem.getSubSystemConfiguration();
      ISystemFilterPoolManager poolManager = config.getFilterPoolManager(myProfile);
      ISystemFilterPool pool = poolManager.createSystemFilterPool(server.getName()+":ssh.files", true);
      // pool==null when the pool with the name has already been created
      if (pool != null) {
      ISystemFilter filter = pool.createSystemFilter("Secret", new String[] {"/path/of/super/secret/resource/"});
      filter.setSubSystem(subSystem);
      // filter is showing as being dirty, we will commit it now.
      filter.commit();
      ISystemFilterPoolReferenceManager refManager = subSystem.getFilterPoolReferenceManager();
      // addReferenceToSystemFilterPool implementation will do a commit
      refManager.addReferenceToSystemFilterPool(pool);
      }
      }
      }
      -------------------------------------------------------------------------------

      It seems that the call to commit() works all the way up to the SystemProfile, and then goes down through all its children, so the final call to addReferenceToSystemFilterPool should take care of persisting all of the new data.

      Thanks,
      Dan



      On Aug 16, 2011, at 1:52 PM, Daniel Johnson wrote:
          Hi David,

          I am using v3.2.0. In order to see the exception when starting Eclipse you must have "Show Filter Pools" enabled on the RSE view (in view drop-down menu). I tried adding the .commit()'s, but nothing changed.

          It seems like when
              subSystem.getFilterPoolReferenceManager().addReferenceToSystemFilterPool(pool);
          is called that it removes any reference to other pools that already exist, is it not intended that a pool reference manager have more than one pool reference? I see that old API used to be to setReferencetoSystemFilterPool, and now it is addReferenceToSystemFilterPool(), maybe there is a bug in 3.2.0 that still only allows one reference? I also tried to get the list of references from the manager, add the new reference object, and then setReferences(Reference[]) with all of them, but still only the last one is saved after a restart.

          My use case is I have multiple server entries that are using the same profile, and I want "MyFilter" to be slightly different for each server, so I am creating a new Filter Pool for each server within the SFTP subsystems Filter Pool Reference Manager. See the attached screenshot for example. It has a default "My Server Profile" Pool that I want every server to have, and then an extra "My server at <IP.ADDRESS>" Pool that will be unique per server.

          After I create these Pools everything seems to work fine, but as soon as I restart only the last created Pool is visible in the list in the screenshot.

          Thanks,
          Dan

          On Aug 16, 2011, at 12:41 PM, David McKnight wrote:
              Which version of RSE are you using?

              I tried to reproduce this although I had to modify the code since my version doesn't have
              systemRegistry.getSystemTypeById():
              ....

              // Create with SSH to add the SFTP subsystem

              IRSESystemType type = RSECorePlugin.
              getTheCoreRegistry().getSystemTypeById(IRSESystemType.SYSTEMTYPE_SSH_ONLY_ID);
              host = systemRegistry.createHost(myProfile.getName(), type, hostName, hostName,
              "MyProfile Description");
              host.setDefaultUserId(username);
              ...


              When I restart Eclipse, I don't hit the problems you're hitting - I still have "MyFilter". If you make the following commit calls, does filter reference get persisted properly?

              ISystemFilter newFilter = pool.createSystemFilter(
              "MyFilter", new String[] {"/path/of/super/secret/resource/"});
              newFilter.commit();


              // Add a reference from the SFTP subsystem to my new pool

              ISystemFilterPoolReference ref = subSystem.getFilterPoolReferenceManager().addReferenceToSystemFilterPool(pool);

              ref.commit();


              ____________________________________
              David McKnight
              Phone: 905-413-3902 , T/L: 969-3902
              Internet:
              dmcknigh@xxxxxxxxxx
              Mail: D1/YFY/8200/TOR
              ____________________________________


              <graycol.gif>
              Daniel Johnson ---16/08/2011 02:47:15 PM---Hi, I am trying to programmatically create Filter entries on a server, and it seems to work fine, bu

              <ecblank.gif>
              From:
              <ecblank.gif>
              Daniel Johnson <danijoh2@xxxxxxxxx>
              <ecblank.gif>
              To:
              <ecblank.gif>
              tm-dev@xxxxxxxxxxx
              <ecblank.gif>
              Date:
              <ecblank.gif>
              16/08/2011 02:47 PM
              <ecblank.gif>
              Subject:
              <ecblank.gif>
              [tm-dev] Programatic Creation of Filters/Pools/References
              <ecblank.gif>
              Sent by:
              <ecblank.gif>
              tm-dev-bounces@xxxxxxxxxxx




              Hi,


              I am trying to programmatically create Filter entries on a server, and it seems to work fine, but as soon as I exit Eclipse and re-launch it seems that all of the Filters on that Server are corrupt, with a NPE being thrown in the error log.


              Can anyone help explain how to do this and/or what I am doing wrong?


              Here is my code:


              String hostName = ...
              // Get host name
              String username = ...
              // Get username

              // Create MyProfile

              ISystemRegistry systemRegistry = RSECorePlugin.getTheSystemRegistry();
              ISystemProfile myProfile = systemRegistry.getSystemProfile(
              "MyProfile");
              if
              (myProfile == null) {
              myProfile = systemRegistry.createSystemProfile(
              "MyProfile", true);
              }


              // Create the host

              IHost host = systemRegistry.getHost(myProfile, hostName);

              if
              (host == null) {
              // Create with SSH to add the SFTP subsystem

              host = systemRegistry.createHost(myProfile.getName(), systemRegistry.getSystemTypeById(IRSESystemType.
              SYSTEMTYPE_SSH_ONLY_ID), hostName, hostName, "MyProfile Description");
              host.
              setDefaultUserId(username);
              }


              for
              (ISubSystem subSystem : host.getSubSystems()) {
              // Want the SFTP subsystem

              if
              (subSystem.getName().equals("Sftp Files")) {
              ISubSystemConfiguration config = subSystem.getSubSystemConfiguration();

              // Get the Pool Manager for my profile type

              ISystemFilterPoolManager poolManager = config.getFilterPoolManager(myProfile);

              // Create the new filter Pool for my new filter (returns null if it already exists)

              ISystemFilterPool pool = poolManager.createSystemFilterPool(server.getName()+":ssh.files", true);
              if
              (pool != null) {
              // Create my new filter, this is a brand new Pool so don't worry checking if it already exists

              pool.createSystemFilter(
              "MyFilter", new String[] {"/path/of/super/secret/resource/"});
              // Add a reference from the SFTP subsystem to my new pool

              subSystem.getFilterPoolReferenceManager().addReferenceToSystemFilterPool(pool);
              }
              }
              }



              And here is the NPE after restarting Eclipse:


              java.lang.NullPointerException

              at org.eclipse.rse.internal.ui.view.SystemViewFilterPoolReferenceAdapter.getName(
              SystemViewFilterPoolReferenceAdapter.java:188)
              at org.eclipse.rse.ui.view.AbstractSystemViewAdapter.testAttribute(
              AbstractSystemViewAdapter.java:1676)
              at org.eclipse.ui.internal.ActionExpression$ObjectStateExpression.preciselyMatches(
              ActionExpression.java:530)
              at org.eclipse.ui.internal.ActionExpression$ObjectStateExpression.isEnabledFor(
              ActionExpression.java:499)
              at org.eclipse.ui.internal.ActionExpression$OrExpression.isEnabledFor(
              ActionExpression.java:582)
              at org.eclipse.ui.internal.ActionExpression$SingleExpression.isEnabledFor(
              ActionExpression.java:743)
              at org.eclipse.ui.internal.ActionExpression.isEnabledFor(
              ActionExpression.java:1053)
              at org.eclipse.ui.internal.decorators.DecoratorDefinition.isEnabledFor(
              DecoratorDefinition.java:282)

              Thanks in advance,
              Daniel Johnson
              _______________________________________________
              tm-dev mailing list

              tm-dev@xxxxxxxxxxx
              http://dev.eclipse.org/mailman/listinfo/tm-dev


              _______________________________________________
              tm-dev mailing list

              tm-dev@xxxxxxxxxxx
              http://dev.eclipse.org/mailman/listinfo/tm-dev
          <Profiles.png>
      <One.png><Two.png><Three.png><Four.png>
      _______________________________________________
      tm-dev mailing list
      tm-dev@xxxxxxxxxxx
      http://dev.eclipse.org/mailman/listinfo/tm-dev
_______________________________________________
tm-dev mailing list
tm-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/tm-dev


GIF image

GIF image


Back to the top