blob: 267c2333bf7b0d1a607ad6dd427149e266669244 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2016 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.releng.tools.preferences;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
import org.eclipse.releng.tools.Messages;
import org.eclipse.releng.tools.RelEngPlugin;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.osgi.service.prefs.BackingStoreException;
/**
* Copyright tools preference page
*/
public class CopyrightPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
private final String NEW_LINE = "\n"; //$NON-NLS-1$
private Composite fComposite;
private Label fCopyrightLabel;
private SourceViewer fEditor;
private Text fInstructions;
private Label fCreationYearLabel;
private Text fCreationYear;
private Label fRevisionYearLabel;
private Text fRevisionYear;
private Button fUseDefaultRevisionYear;
private Button fReplaceAllExisting;
// disable fix up existing copyright till it works better
// private Button fFixExisting;
private Button fIgnoreProperties;
private Button fIgnoreXml;
@Override
public void init(IWorkbench workbench) {
// TODO Auto-generated method stub
}
@Override
protected Control createContents(Composite parent) {
//The main composite
fComposite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
layout.marginWidth = 0;
layout.marginHeight = 0;
fComposite.setLayout(layout);
fComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
// copyright template editor
fEditor = createEditor(fComposite);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 2;
data.horizontalIndent = 0;
fInstructions = new Text(fComposite, SWT.READ_ONLY);
fInstructions.setText(Messages.getString("CopyrightPreferencePage.0")); //$NON-NLS-1$
fInstructions.setLayoutData(data);
// default creation year
fCreationYearLabel = new Label(fComposite, SWT.NONE);
fCreationYearLabel.setText(Messages.getString("CopyrightPreferencePage.1")); //$NON-NLS-1$
fCreationYear = new Text(fComposite, SWT.BORDER);
fCreationYear.setTextLimit(4);
// default revision year
fRevisionYearLabel = new Label(fComposite, SWT.NONE);
fRevisionYearLabel.setText(Messages.getString("CopyrightPreferencePage.7")); //$NON-NLS-1$
fRevisionYear = new Text(fComposite, SWT.BORDER);
fRevisionYear.setTextLimit(4);
// always use default revision year instead of cvs lookup
fUseDefaultRevisionYear = new Button(fComposite, SWT.CHECK);
fUseDefaultRevisionYear.setText(Messages.getString("CopyrightPreferencePage.8")); //$NON-NLS-1$
data = new GridData();
data.horizontalSpan = 2;
fUseDefaultRevisionYear.setLayoutData(data);
// replace all existing copyright statement
fReplaceAllExisting = new Button(fComposite, SWT.CHECK);
fReplaceAllExisting.setText(Messages.getString("CopyrightPreferencePage.2")); //$NON-NLS-1$
data = new GridData();
data.horizontalSpan = 2;
fReplaceAllExisting.setLayoutData(data);
// disable fix up existing copyright till it works better
// // fix up existing copyright statement
// fFixExisting = new Button(fComposite, SWT.CHECK);
// fFixExisting.setText(Messages.getString("CopyrightPreferencePage.3")); //$NON-NLS-1$
// data = new GridData();
// data.horizontalSpan = 2;
// fFixExisting.setLayoutData(data);
// ignore properties files
fIgnoreProperties = new Button(fComposite, SWT.CHECK);
fIgnoreProperties.setText(Messages.getString("CopyrightPreferencePage.4")); //$NON-NLS-1$
data = new GridData();
data.horizontalSpan = 2;
fIgnoreProperties.setLayoutData(data);
//[276257] re-enabling xml files
fIgnoreXml = new Button(fComposite, SWT.CHECK);
fIgnoreXml.setText(Messages.getString("CopyrightPreferencePage.9")); //$NON-NLS-1$
data = new GridData();
data.horizontalSpan = 2;
fIgnoreXml.setLayoutData(data);
KeyListener listener1 = new KeyAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.KeyAdapter#keyReleased(org.eclipse.swt.events.KeyEvent)
*/
@Override
public void keyReleased(KeyEvent e) {
validateValues();
}
};
fCreationYear.addKeyListener(listener1);
fRevisionYear.addKeyListener(listener1);
// disable fix up existing copyright till it works better
// SelectionListener listener2 = new SelectionAdapter() {
// public void widgetSelected(SelectionEvent e) {
// handleReplaceAllEnabled(fReplaceAllExisting.getSelection(), fFixExisting.getSelection());
// }
// };
// fReplaceAllExisting.addSelectionListener(listener2);
initializeValues();
applyDialogFont(fComposite);
return fComposite;
}
/**
* Create the sourceviewer editor to be used to edit the copyright template
*/
private SourceViewer createEditor(Composite parent) {
fCopyrightLabel = new Label(parent, SWT.NONE);
fCopyrightLabel.setText(Messages.getString("CopyrightPreferencePage.5")); //$NON-NLS-1$
GridData data= new GridData();
data.horizontalSpan= 2;
fCopyrightLabel.setLayoutData(data);
SourceViewer viewer= createViewer(parent);
IDocument document= new Document();
viewer.setEditable(true);
viewer.setDocument(document);
// just use a default 10 lines
int nLines = 10;
// int nLines= document.getNumberOfLines();
// if (nLines < 5) {
// nLines= 5;
// } else if (nLines > 12) {
// nLines= 12;
// }
Control control= viewer.getControl();
data= new GridData(GridData.FILL_HORIZONTAL);
data.widthHint= convertWidthInCharsToPixels(80);
data.heightHint= convertHeightInCharsToPixels(nLines);
data.horizontalSpan = 2;
control.setLayoutData(data);
// TODO add content assist support
// viewer.addTextListener(new ITextListener() {
// public void textChanged(TextEvent event) {
// if (event.getDocumentEvent() != null)
// doSourceChanged(event.getDocumentEvent().getDocument());
// }
// });
//
// viewer.addSelectionChangedListener(new ISelectionChangedListener() {
// public void selectionChanged(SelectionChangedEvent event) {
// updateSelectionDependentActions();
// }
// });
//
// viewer.prependVerifyKeyListener(new VerifyKeyListener() {
// public void verifyKey(VerifyEvent event) {
// handleVerifyKeyPressed(event);
// }
// });
return viewer;
}
/**
* Creates the viewer to be used to display the copyright.
*
* @param parent the parent composite of the viewer
* @return a configured <code>SourceViewer</code>
*/
private SourceViewer createViewer(Composite parent) {
SourceViewer viewer= new SourceViewer(parent, null, null, false, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
SourceViewerConfiguration configuration= new SourceViewerConfiguration() {
// TODO add content assist support
// public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
//
// ContentAssistant assistant= new ContentAssistant();
// assistant.enableAutoActivation(true);
// assistant.enableAutoInsert(true);
// assistant.setContentAssistProcessor(fTemplateProcessor, IDocument.DEFAULT_CONTENT_TYPE);
// return assistant;
// }
};
viewer.configure(configuration);
return viewer;
}
/**
* Initialize the control values in this preference page
*/
private void initializeValues() {
IPreferenceStore store = getPreferenceStore();
fEditor.getDocument().set(store.getString(RelEngCopyrightConstants.COPYRIGHT_TEMPLATE_KEY));
fCreationYear.setText(store.getString(RelEngCopyrightConstants.CREATION_YEAR_KEY));
fRevisionYear.setText(store.getString(RelEngCopyrightConstants.REVISION_YEAR_KEY));
fUseDefaultRevisionYear.setSelection(store.getBoolean(RelEngCopyrightConstants.USE_DEFAULT_REVISION_YEAR_KEY));
fReplaceAllExisting.setSelection(store.getBoolean(RelEngCopyrightConstants.REPLACE_ALL_EXISTING_KEY));
// disable fix up existing copyright till it works better
// handleReplaceAllEnabled(fReplaceAllExisting.getSelection(), store.getBoolean(RelEngCopyrightConstants.FIX_UP_EXISTING_KEY));
fIgnoreProperties.setSelection(store.getBoolean(RelEngCopyrightConstants.IGNORE_PROPERTIES_KEY));
//[276257] re-enabling xml files
fIgnoreXml.setSelection(store.getBoolean(RelEngCopyrightConstants.IGNORE_XML_KEY));
}
/**
* Validate the control values in this preference page
*/
private void validateValues() {
String ERROR_MESSAGE = Messages.getString("CopyrightPreferencePage.6"); //$NON-NLS-1$
String errorMsg = null;
// creation & revision year must be an integer
String creationYear = fCreationYear.getText();
String revisionYear = fRevisionYear.getText();
try {
int year = Integer.parseInt(creationYear);
if (year < 0) {
errorMsg = ERROR_MESSAGE;
}
year = Integer.parseInt(revisionYear);
if (year < 0) {
errorMsg = ERROR_MESSAGE;
}
} catch (NumberFormatException e) {
errorMsg = ERROR_MESSAGE;
}
setErrorMessage(errorMsg);
setValid(errorMsg == null);
}
// disable fix up existing copyright till it works better
// /**
// * Handles when the Replace all copyrights checkbox is checked/unchecked.
// * When checked, fix up copyright checkbox is disabled and checked
// * When unchecked, fix up copyright checkbox is enabled and set to default value
// * @param replaceAll
// * @param defaultValue
// */
// private void handleReplaceAllEnabled(boolean replaceAll, boolean defaultValue) {
// if (fReplaceAllExisting.isEnabled() && !replaceAll)
// fFixExisting.setEnabled(true);
// else
// fFixExisting.setEnabled(false);
//
// if (replaceAll) {
// fFixExisting.setSelection(replaceAll);
// } else {
// fFixExisting.setSelection(defaultValue);
// }
// }
@Override
protected IPreferenceStore doGetPreferenceStore() {
return RelEngPlugin.getDefault().getPreferenceStore();
}
@Override
protected void performDefaults() {
IPreferenceStore store = getPreferenceStore();
fEditor.getDocument().set(store.getDefaultString(RelEngCopyrightConstants.COPYRIGHT_TEMPLATE_KEY));
fCreationYear.setText(store.getDefaultString(RelEngCopyrightConstants.CREATION_YEAR_KEY));
fRevisionYear.setText(store.getDefaultString(RelEngCopyrightConstants.REVISION_YEAR_KEY));
fUseDefaultRevisionYear.setSelection(getPreferenceStore().getDefaultBoolean(RelEngCopyrightConstants.USE_DEFAULT_REVISION_YEAR_KEY));
fReplaceAllExisting.setSelection(getPreferenceStore().getDefaultBoolean(RelEngCopyrightConstants.REPLACE_ALL_EXISTING_KEY));
// disable fix up existing copyright till it works better
// handleReplaceAllEnabled(fReplaceAllExisting.getSelection(), getPreferenceStore().getDefaultBoolean(RelEngCopyrightConstants.FIX_UP_EXISTING_KEY));
fIgnoreProperties.setSelection(getPreferenceStore().getDefaultBoolean(RelEngCopyrightConstants.IGNORE_PROPERTIES_KEY));
//[276257] re-enabling xml files
fIgnoreXml.setSelection(getPreferenceStore().getDefaultBoolean(RelEngCopyrightConstants.IGNORE_XML_KEY));
super.performDefaults();
}
@Override
public boolean performOk() {
IPreferenceStore store = getPreferenceStore();
store.setValue(RelEngCopyrightConstants.COPYRIGHT_TEMPLATE_KEY, fixupLineDelimiters(fEditor.getDocument()));
store.setValue(RelEngCopyrightConstants.CREATION_YEAR_KEY, fCreationYear.getText());
store.setValue(RelEngCopyrightConstants.REVISION_YEAR_KEY, fRevisionYear.getText());
store.setValue(RelEngCopyrightConstants.USE_DEFAULT_REVISION_YEAR_KEY, fUseDefaultRevisionYear.getSelection());
store.setValue(RelEngCopyrightConstants.REPLACE_ALL_EXISTING_KEY, fReplaceAllExisting.getSelection());
// disable fix up existing copyright till it works better
// store.setValue(RelEngCopyrightConstants.FIX_UP_EXISTING_KEY, fFixExisting.getSelection());
store.setValue(RelEngCopyrightConstants.IGNORE_PROPERTIES_KEY, fIgnoreProperties.getSelection());
//[276257] re-enabling xml files
store.setValue(RelEngCopyrightConstants.IGNORE_XML_KEY, fIgnoreXml.getSelection());
try {
InstanceScope.INSTANCE.getNode(RelEngPlugin.ID).flush();
} catch (BackingStoreException e) {
RelEngPlugin.log(IStatus.ERROR, "could not save preferences", e); //$NON-NLS-1$
}
return super.performOk();
}
/**
* Fix up line delimiters in doc to use only \n
* @param doc
* @return
*/
private String fixupLineDelimiters(IDocument doc) {
String docContents = doc.get();
String newText = ""; //$NON-NLS-1$
int lineCount = doc.getNumberOfLines();
for (int i = 0; i < lineCount; i++) {
try {
IRegion lineInfo = doc.getLineInformation(i);
int lineStartOffset = lineInfo.getOffset();
int lineLength = lineInfo.getLength();
int lineEndOffset = lineStartOffset + lineLength;
newText += docContents.substring(lineStartOffset, lineEndOffset);
if ((i < lineCount - 1) && (fEditor.getDocument().getLineDelimiter(i) != null))
newText += NEW_LINE;
}
catch (BadLocationException exception) {
// exception
}
}
return newText;
}
}