Tuesday, May 12, 2015

Hiding certain UI elements from Eclipse RCP

We can achieve this by using "org.eclipse.ui.activities" extension point.

http://blog.vogella.com/2009/07/13/eclipse-activities/


We also use "Perspective Extensions" extension.
Example:
<extension
         point="org.eclipse.ui.perspectiveExtensions">
      <perspectiveExtension
            targetID="com.kk.StudioPerspective">
         <hiddenToolBarItem
               id="new.group">
         </hiddenToolBarItem>
      </perspectiveExtension>
   </extension>

Tuesday, May 5, 2015

Running multiple commands from single batch file in Windows

If your batch file is having multiple commands and those commands are trying to execute or invoke other batch commands something like this.

Example:
SET PATH=%PATH%;%PROGRAMFILES%\nodejs;%PROGRAMFILES(x86)%\nodejs;%APPDATA%\npm
npm install -g mypackageinstaller
mypackageinstaller use latest


If you run above commands from a batch file, only first 2 commands 
will be get executed and the last one will be ignored.

Reason being, here npm is a batch file from Node, once windows command process invokes npm process,after npm get executed it will not return to the original command process. Hence,third command won't be executed from a batch file.

To avoid these issues, we can invoke these kind of commands using 
"call".

Modified batch script:

SET PATH=%PATH%;%PROGRAMFILES%\nodejs;%PROGRAMFILES(x86)%\nodejs;%APPDATA%\npm
call npm install -g mypackageinstaller
call mypackageinstaller use latest

All these commands will be executed sequentially.

To make them parallel, we can use "start" command.

Listening to project explorer changes

If you want to control some actions based on the selection of an element from the project explorer, we can register a post selection changes through service registry.

//Register listener
ISelectionService ss = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();

ProjectExplorerSelectionListener selectionListener = new ProjectExplorerSelectionListener();
ss.addPostSelectionListener(IPageLayout.ID_PROJECT_EXPLORER, selectionListener);



//Listener
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;

class ProjectExplorerSelectionListener implements ISelectionListener
{
public void selectionChanged(IWorkbenchPart part, ISelection newSelection)
{
if (newSelection instanceof IStructuredSelection)
{
Object element = ((IStructuredSelection) newSelection).getFirstElement();
if (element instanceof IAdaptable)
{
IResource resource = (IResource) ((IAdaptable) element).getAdapter(IResource.class);
final IProject project = resource.getProject();
//do your action here!!
}
}

}

}

XML validation w.r.t to schema

                                                                                                         
import java.io.File;                                                                                      
import java.io.IOException;                                                                              
                                                                                                         
import javax.xml.XMLConstants;                                                                            
import javax.xml.transform.stream.StreamSource;                                                          
import javax.xml.validation.Schema;                                                                      
import javax.xml.validation.SchemaFactory;                                                                
import javax.xml.validation.Validator;                                                                    
                                                                                                         
import org.xml.sax.ErrorHandler;                                                                          
import org.xml.sax.SAXException;                                                                          
import org.xml.sax.SAXParseException;                                                                    
                                                                                                         
public class SchemaValidator                                                                              
{                                                                                                        
public static void main(String[] args)                                                                
{                                                                                                    
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);            
try                                                                                              
{                                                                                                
Schema schema = factory.newSchema(new File("C:\\myschema.xsd"));                              
Validator validator = schema.newValidator();                                                  
validator.setErrorHandler(new SimpleErrorHandler());                                          
try                                                                                          
{                                                                                            
validator.validate(new StreamSource(new File("C:\\myxmldata.xml")));                      
}                                                                                            
catch (SAXException e)                                                                        
{                                                                                            
e.printStackTrace();                                                                      
}                                                                                            
catch (IOException e)                                                                        
{                                                                                            
e.printStackTrace();                                                                      
}                                                                                            
}                                                                                                
catch (SAXException e)                                                                            
{                                                                                                
e.printStackTrace();                                                                          
}                                                                                                
}                                                                                                    
}                                                                                                        
                                                                                                         
class SimpleErrorHandler implements ErrorHandler                                                          
{                                                                                                        
public void warning(SAXParseException e) throws SAXException                                          
{                                                                                                    
System.out.println(e.getMessage());                                                              
// create problem marker                                                                          
}                                                                                                    
                                                                                                         
public void error(SAXParseException e) throws SAXException                                            
{                                                                                                    
System.out.println(e.getMessage());                                                              
// create problem marker                                                                          
}                                                                                                    
                                                                                                         
public void fatalError(SAXParseException e) throws SAXException                                      
{                                                                                                    
System.out.println(e.getMessage());                                                              
// create problem marker                                                                          
}                                                                                                    
}                                                                                                        
                                                                                                            

Checking XML structure validation

To check the syntax validation for XML files, we can use below piece of code.Implement an error handler to handle the syntax errors.

This does not do any schema validation. 

//DOM model
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
factory.setNamespaceAware(true);


DocumentBuilder xmlBuilder = factory.newDocumentBuilder();
xmlBuilder.setErrorHandler(new SimpleErrorHandler());
xmlBuilder.parse(new ByteArrayInputStream(myXMLString.getBytes(IOUtil.UTF_8)));


//Handler
public class SimpleErrorHandler implements ErrorHandler
{
public void warning(SAXParseException e) throws SAXException
{
System.out.println(e.getMessage());
                       //create problem marker
}

public void error(SAXParseException e) throws SAXException
{
System.out.println(e.getMessage());
                       //create problem marker
}

public void fatalError(SAXParseException e) throws SAXException
{
System.out.println(e.getMessage());
                       //create problem marker
}
}



Wednesday, April 29, 2015

Git:Checkout to newly added remote branch

For example, If new branch is added to the repository and now you wanted to setup that in your local system.

$ git fetch

This will look up the origin and update the local repository with the new data.

For example, newly added branch is 'master'. It will show something like this.
master->origin/master

$ git branch -r

Above command tell you what are all the remote branches available.

$git checkout -b master origin/master

This will create a new branch 'master' and will have a synch with remote branch /origin/master'


KKOLIPAKA-MBP:$ git fetch
From https://github.com/kolipakakondal/titanium_studio
 * [new branch]      master -> origin/master

KKOLIPAKA-MBP:$ git branch -r
  origin/HEAD -> origin/development
  origin/development
  origin/master
  upstream/release

KKOLIPAKA-MBP:$ git checkout -b master origin/master
Checking out files: 100% (453/453), done.
Branch master set up to track remote branch master from origin.

Switched to a new branch 'master'

Tuesday, April 14, 2015

Eclipse: Indirectly referenced from required .class files issue

This issue comes when your class is indirectly referring to an other class which is not accessible from your plugin.

For example:











In this scenario, if we get an error some thing like this in Plugin-C.
The type UserAgent cannot be resolved. It is indirectly referenced from required .class files.

The problem is, Plugin-C is unable to locate class from Plugin-A. Because Plugin-C is not added Plugin-A as a dependency.

2 ways we can solve this.
1. Re-export Plugin-A from Plug-in B using "Re-export this dependency" option from Properties in dependencies section.
2. Directly add Plugin-A in Plugin-C dependency list.