}
public void update(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException,
ForceConnectionException, ForceProjectException, InsufficientPermissionsException {
ProjectModel projectModel = projectController.getProjectModel();
ForceProject updatedProject = projectModel.getForceProject();
IProject project = projectModel.getProject();
ForceProject existingProject = ContainerDelegate.getInstance().getServiceLocator().getProjectService().getForceProject(project);
if (existingProject.isOrgChange(updatedProject)) {
ContainerDelegate.getInstance().getFactoryLocator().getConnectionFactory().removeConnection(existingProject);
ContainerDelegate.getInstance().getFactoryLocator().getMetadataFactory().removeMetadataStubExt(existingProject);
ContainerDelegate.getInstance().getFactoryLocator().getToolingFactory().removeToolingStubExt(existingProject);
ContainerDelegate.getInstance().getFactoryLocator().getConnectionFactory().getConnection(updatedProject);
fetchComponents = checkRefreshProject();
if (progressContainer == null) {
progressContainer = new ProgressMonitorDialog(getShell());
}
progressContainer.run(false, true, this);
} else if (!updatedProject.equals(existingProject)){
// adjust timeout, if changed
if (existingProject.getReadTimeoutSecs() != updatedProject.getReadTimeoutSecs()) {
try {
MetadataStubExt metadataStubExt =
ContainerDelegate.getInstance().getFactoryLocator().getMetadataFactory().getMetadataStubExt(existingProject);
metadataStubExt.setTimeout(updatedProject.getReadTimeoutSecs());
} catch (ForceRemoteException e) {