// ============================================================================
//
// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.repository.ui.properties;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.util.Assert;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.EmptyRepositoryObject;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.repository.model.IProxyRepositoryFactory;
import org.talend.repository.model.RepositoryNode;
/**
* DOC mhelleboid class global comment. Detailled comment <br/>
*
* $Id: AbstractSection.java 77219 2012-01-24 01:14:15Z mhirt $
*
*/
public abstract class AbstractSection extends AbstractPropertySection {
private static final List<AbstractSection> REGISTERED_SECTIONS = new ArrayList<AbstractSection>();
private IRepositoryViewObject repositoryObject;
private RepositoryNode repositoryNode;
private FocusListener listener = new FocusListener() {
public void focusLost(FocusEvent e) {
performSave();
}
public void focusGained(FocusEvent e) {
manageLock();
}
};
/**
* DOC tguiu AbstractSection constructor comment.
*/
public AbstractSection() {
super();
REGISTERED_SECTIONS.add(this);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.views.properties.tabbed.AbstractPropertySection#createControls(org.eclipse.swt.widgets.Composite,
* org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage)
*/
@Override
public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage) {
super.createControls(parent, aTabbedPropertySheetPage);
}
protected IRepositoryViewObject getObject() {
return repositoryObject;
}
protected RepositoryNode getNode() {
return repositoryNode;
}
protected ERepositoryObjectType getType() {
return repositoryObject.getRepositoryObjectType();
}
/**
* DOC tguiu Comment method "addFocusListener".
*
* @param nameText2
*/
protected void addFocusListener(Control control) {
control.addFocusListener(listener);
}
protected void addFocusListenerToChildren(Control control) {
addFocusListener(control);
if (control instanceof Composite) {
for (Control child : ((Composite) control).getChildren()) {
addFocusListenerToChildren(child);
}
}
}
protected void performSave() {
// Because props are now read-only:
// for (AbstractSection section : REGISTERED_SECTIONS) {
// section.beforeSave();
// }
// save();
// performRefresh();
// refreshRepositoryView();
}
protected static void performRefresh() {
for (AbstractSection section : REGISTERED_SECTIONS) {
if (section.getPart() != null) {
section.refresh();
}
}
}
@Override
public void setInput(IWorkbenchPart part, ISelection selection) {
super.setInput(part, selection);
Assert.isTrue(selection instanceof IStructuredSelection);
Object input = ((IStructuredSelection) selection).getFirstElement();
if (!(input instanceof RepositoryNode)) {
if (input instanceof IAdaptable) {
// see ProcessPart.getAdapter()
IAdaptable adaptable = (IAdaptable) input;
input = adaptable.getAdapter(RepositoryNode.class);
}
}
Assert.isTrue(input instanceof RepositoryNode);
repositoryNode = (RepositoryNode) input;
repositoryObject = repositoryNode.getObject();
if (repositoryObject == null) {
repositoryObject = new EmptyRepositoryObject();
enableControls(false);
showControls(false);
return;
}
manageLock();
ERepositoryObjectType type = repositoryObject.getRepositoryObjectType();
showControls(type != ERepositoryObjectType.METADATA_CON_TABLE);
}
/**
* DOC tguiu Comment method "manageLock".
*/
protected void manageLock() {
// Because props are now read-only:
// boolean enableControl = ProxyRepositoryFactory.getInstance().getStatus(repositoryObject).isEditable();
// enableControls(enableControl);
// Because props are now read-only:
enableControls(false);
}
protected final IWorkbenchPage getActivePage() {
return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
}
/**
* DOC tguiu Comment method "enableControls".
*
* @param locked
*/
private static void showControls(boolean visible) {
for (AbstractSection section : REGISTERED_SECTIONS) {
if (section.getPart() != null) {
section.showControl(visible);
}
}
}
private static void enableControls(boolean enable) {
for (AbstractSection section : REGISTERED_SECTIONS) {
if (section.getPart() != null) {
section.enableControl(enable);
}
}
}
/**
* DOC tguiu Comment method "enableControl".
*
* @param b
*/
protected abstract void showControl(boolean visible);
protected abstract void enableControl(boolean enable);
protected abstract void beforeSave();
@Override
public void dispose() {
super.dispose();
REGISTERED_SECTIONS.remove(this);
}
/**
* DOC tguiu Comment method "getRepositoryFactory".
*
* @return
*/
protected IProxyRepositoryFactory getRepositoryFactory() {
return ProxyRepositoryFactory.getInstance();
}
}