Sunday, September 13, 2015

Reading an extension point from eclipse plugin

public void readExtensionPoint() {
IExtensionRegistry registry = Platform.getExtensionRegistry();
IConfigurationElement[] elements = registry.getConfigurationElementsFor("com.kk.core", "platformServices");
for (IConfigurationElement iConfigurationElement : elements)
{
iConfigurationElement.getAttribute("id");
try
{
//This is your class
Object createExecutableExtension = iConfigurationElement.createExecutableExtension("class");
}
catch (CoreException e)
{
e.printStackTrace();
}
}

}


Here is my extension point schema definition:

<?xml version='1.0' encoding='UTF-8'?>
<!-- Schema file written by PDE -->
<schema targetNamespace="com.kk.core" xmlns="http://www.w3.org/2001/XMLSchema">
<annotation>
      <appinfo>
         <meta.schema plugin="com.kk.core" id="platformServices" name="platformServices"/>
      </appinfo>
      <documentation>
         [Enter description of this extension point.]
      </documentation>
   </annotation>

   <element name="extension">
      <annotation>
         <appinfo>
            <meta.element />
         </appinfo>
      </annotation>
      <complexType>
         <sequence minOccurs="1" maxOccurs="unbounded">
            <element ref="service"/>
         </sequence>
         <attribute name="point" type="string" use="required">
            <annotation>
               <documentation>
                  
               </documentation>
            </annotation>
         </attribute>
         <attribute name="id" type="string">
            <annotation>
               <documentation>
                  
               </documentation>
            </annotation>
         </attribute>
         <attribute name="name" type="string">
            <annotation>
               <documentation>
                  
               </documentation>
               <appinfo>
                  <meta.attribute translatable="true"/>
               </appinfo>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="service">
      <complexType>
         <attribute name="id" type="string" use="required">
            <annotation>
               <documentation>
                  
               </documentation>
            </annotation>
         </attribute>
         <attribute name="class" type="string" use="required">
            <annotation>
               <documentation>
                  
               </documentation>
               <appinfo>
                  <meta.attribute kind="java" basedOn="com.kk.core.services.Service:com.kk.core.services.IService"/>
               </appinfo>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <annotation>
      <appinfo>
         <meta.section type="since"/>
      </appinfo>
      <documentation>
         [Enter the first release in which this extension point appears.]
      </documentation>
   </annotation>

   <annotation>
      <appinfo>
         <meta.section type="examples"/>
      </appinfo>
      <documentation>
         [Enter extension point usage example here.]
      </documentation>
   </annotation>

   <annotation>
      <appinfo>
         <meta.section type="apiinfo"/>
      </appinfo>
      <documentation>
         [Enter API information here.]
      </documentation>
   </annotation>

   <annotation>
      <appinfo>
         <meta.section type="implementation"/>
      </appinfo>
      <documentation>
         [Enter information about supplied implementation of this extension point.]
      </documentation>
   </annotation>


</schema>


Extension:
   <extension
         id="com.kk.core.platform.services"
         name="KK Platform Services"
         point="com.core.platformServices">
      <service
            class="com.kk.core.services.CheckService"
            id="xx34567vvk">
      </service>
     
   </extension>

Sunday, September 6, 2015

Storing in eclipse secure storage with encryption

ISecurePreferences root = SecurePreferencesFactory.getDefault();
ISecurePreferences node = root.node("/com/kk/store"); //path

//store
try
{
node.put("myusername", "mysecretpassword", true);
}
catch (StorageException e)
{
e.printStackTrace();

}

Where does Eclipse secure storage file is saved ?

This you can find from Eclipse preferences.
Eclipse -> Preferences -> General -> Security -> Secure Storage -> Contents Tab

Here you can find 'Storage Location'.

Example:
/Users/kkolipaka/.eclipse/org.eclipse.equinox.security/secure_storage



How to get the Eclipse Installation location ?

Eclipse provided a direct API call for this.

Platform.getInstallLocation().getURL();

To get a string path:

Platform.getInstallLocation().getURL().getPath();

Wednesday, September 2, 2015

Undo a git rebase

Step 1: Identify the head commit of the branch till where you wanted to undo it.

$ git reflog
5621e87 HEAD@{0}: checkout: moving from TISTUD-7562 to development
7747926 HEAD@{1}: rebase -i (finish): returning to refs/heads/TISTUD-7562
7747926 HEAD@{2}: rebase -i (squash): TISTUD-7562:For limited plan billing is not opened via wizard
2101ed5 HEAD@{3}: rebase -i (start): checkout 5621e87fac883fca1783bb2f1b6f811422bdf289
0975830 HEAD@{4}: rebase: aborting
0975830 HEAD@{5}: reset: moving to HEAD@{1}
2101ed5 HEAD@{6}: rebase -i (start): checkout 5621e87fac883fca1783bb2f1b6f811422bdf289
0975830 HEAD@{7}: commit: TISTUD-7562:Avoiding multiple validations during the package launch actions from package explorer and app explorer.
2101ed5 HEAD@{8}: rebase finished: returning to refs/heads/TISTUD-7562
2101ed5 HEAD@{9}: rebase: TISTUD-7562:For limited plan billing is not opened via wizard


Here, I wanted to undo till HEAD@{7}

Step 2: Reset to required commit

git reset --hard HEAD@{7}

This will bring back all the changes which you are having at HEAD@{7} commit.

Thursday, July 9, 2015

Chaning git remote tracking repository or url

Here is the example.

$ git remote -v
origin  https://github.com/kolipakakondal/titanium_studio.git (fetch)
origin  https://github.com/kolipakakondal/titanium_studio.git (push)
upstream        https://github.com/appcelerator/titanium_studio_360.git (fetch)
upstream        https://github.com/appcelerator/titanium_studio_360.git (push)

Currently my 'upstream' branch is pointing to a wrong remote url, and I wanted to change it.

$ git remote set-url upstream https://github.com/appcelerator/titanium_studio.git
$ git remote -vorigin  https://github.com/kolipakakondal/titanium_studio.git (fetch)
origin  https://github.com/kolipakakondal/titanium_studio.git (push)
upstream        https://github.com/appcelerator/titanium_studio.git (fetch)
upstream        https://github.com/appcelerator/titanium_studio.git (push)

Wednesday, June 10, 2015

How to rebase your pull request

But, why ?

Your pull request(PR) might be pretty old and in mean time many people would have changed the same code. So you can't simply merge your PR into master branch because of the conflicts.

Step 1:
Fetch the latest code from remote master branch.
> git fetch upstream

here upstream is pointing to a remote repository.

Step 2:
If you have multiple commits, it's better to squash them. But it's an optional step.
>git merge-base <yourforkedbranch> <mainremotebranch>
Example: git merge-base TISTUD-9000 release

This will give the hash-id.
>git rebase --interactive <hash-id>

It will list down the commits, If you have more than one, you can replace 'pick' by 'squash' for commits expect first one.
Example:
pick 4455 
squash 5555
squash 85858

Step 3:
Run rebase command
>git rebase upstream/master

For sure, this will fail because of the conflicts. I mean, that's the main reason why we wanted to go for rebase here.

And once you resolve the conflicts continue with the rebase --continue.

Step 4: 
Update the pull request forcefully
>git push -f

or
> git push origin <yourbranch> -f

This is the crystal clear resource which will talk about this.