/******************************************************************************* * Copyright (c) 2013 Zend Techologies Ltd. * 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: * Zend Technologies Ltd. - initial API and implementation *******************************************************************************/ package org.eclipse.php.formatter.core; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.eclipse.jface.text.IDocument; import org.eclipse.php.formatter.core.profiles.CodeFormatterPreferences; import org.eclipse.php.internal.core.format.FormatPreferencesSupport; import org.eclipse.php.internal.core.format.IFormatterCommonPreferences; import org.eclipse.php.internal.formatter.core.Logger; import org.eclipse.wst.sse.core.StructuredModelManager; import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; public class PHPCodeFormatterCommonPreferences implements IFormatterCommonPreferences { @Override public int getIndentationWrappedLineSize(IDocument document) { CodeFormatterPreferences preferences = getPreferences(document); if (preferences == null) { return FormatPreferencesSupport.getInstance().getIndentationWrappedLineSize(document); } else { return preferences.line_wrap_wrapped_lines_indentation; } } @Override public int getIndentationArrayInitSize(IDocument document) { CodeFormatterPreferences preferences = getPreferences(document); if (preferences == null) { return FormatPreferencesSupport.getInstance().getIndentationArrayInitSize(document); } else { return preferences.line_wrap_array_init_indentation; } } @Override public int getIndentationSize(IDocument document) { CodeFormatterPreferences preferences = getPreferences(document); if (preferences == null) { return FormatPreferencesSupport.getInstance().getIndentationSize(document); } else { return preferences.indentationSize; } } @Override public char getIndentationChar(IDocument document) { CodeFormatterPreferences preferences = getPreferences(document); if (preferences == null) { return FormatPreferencesSupport.getInstance().getIndentationChar(document); } else { return preferences.indentationChar; } } @Override public int getTabSize(IDocument document) { CodeFormatterPreferences preferences = getPreferences(document); if (preferences == null) { return FormatPreferencesSupport.getInstance().getIndentationSize(document); } else { return preferences.tabSize; } } @Override public boolean useTab(IDocument document) { return getIndentationChar(document) == '\t'; } private CodeFormatterPreferences getPreferences(IDocument document) { IStructuredModel structuredModel = null; try { if (document instanceof IStructuredDocument) { structuredModel = StructuredModelManager.getModelManager().getExistingModelForRead(document); if (structuredModel == null) { try { CodeFormatterPreferences preferences = PHPCodeFormatter.getPreferences((IProject) null); return preferences; } catch (Exception e) { } return null; } IProject project = getProject(structuredModel); if (project == null) { Logger.logException(new IllegalStateException("Cann't resolve file name")); //$NON-NLS-1$ } try { CodeFormatterPreferences preferences = PHPCodeFormatter.getPreferences(project); return preferences; } catch (Exception e) { } } } catch (Exception e) { Logger.logException(e); } finally { if (structuredModel != null) { structuredModel.releaseFromRead(); } } return null; } /** * @param doModelForPHP * @return project from document */ private final IProject getProject(IStructuredModel doModelForPHP) { final String id = doModelForPHP.getId(); if (id != null) { final IFile file = getFile(id); if (file != null) { return file.getProject(); } } return null; } /** * @param id * @return the file from document */ private IFile getFile(final String id) { return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(id)); } }