blob: 6e05b35c71898ac3d78bca88a43f01e2ae1be6ec [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.php.symfony2;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.netbeans.modules.php.api.framework.BadgeIcon;
import org.netbeans.modules.php.api.phpmodule.PhpModule;
import org.netbeans.modules.php.api.phpmodule.PhpModuleProperties;
import org.netbeans.modules.php.spi.annotation.AnnotationCompletionTagProvider;
import org.netbeans.modules.php.spi.framework.commands.FrameworkCommandSupport;
import org.netbeans.modules.php.spi.framework.PhpFrameworkProvider;
import org.netbeans.modules.php.spi.framework.PhpModuleActionsExtender;
import org.netbeans.modules.php.spi.framework.PhpModuleCustomizerExtender;
import org.netbeans.modules.php.spi.framework.PhpModuleExtender;
import org.netbeans.modules.php.spi.framework.PhpModuleIgnoredFilesExtender;
import org.netbeans.modules.php.spi.phpmodule.ImportantFilesImplementation;
import org.netbeans.modules.php.symfony2.annotations.extra.SymfonyExtraAnnotationsProvider;
import org.netbeans.modules.php.symfony2.annotations.security.SymfonySecurityAnnotationsProvider;
import org.netbeans.modules.php.symfony2.annotations.validators.SymfonyValidatorsAnnotationsProvider;
import org.netbeans.modules.php.symfony2.commands.SymfonyCommandSupport;
import org.netbeans.modules.php.symfony2.preferences.SymfonyPreferences;
import org.netbeans.modules.php.symfony2.ui.actions.SymfonyPhpModuleActionsExtender;
import org.openide.filesystems.FileObject;
import org.openide.util.ImageUtilities;
import org.openide.util.NbBundle;
/**
* PHP framework provider for Symfony 2/3 PHP framework.
*/
public final class SymfonyPhpFrameworkProvider extends PhpFrameworkProvider {
private static final Logger LOGGER = Logger.getLogger(SymfonyPhpFrameworkProvider.class.getName());
private static final SymfonyPhpFrameworkProvider INSTANCE = new SymfonyPhpFrameworkProvider();
private static final String ICON_PATH = "org/netbeans/modules/php/symfony2/ui/resources/symfony_badge_8.png"; // NOI18N
private final BadgeIcon badgeIcon;
@NbBundle.Messages({
"LBL_FrameworkName=Symfony 2/3 PHP Web Framework",
"LBL_FrameworkDescription=Symfony 2/3 PHP Web Framework"
})
private SymfonyPhpFrameworkProvider() {
super("Symfony 2/3 PHP Web Framework", Bundle.LBL_FrameworkName(), Bundle.LBL_FrameworkDescription()); // NOI18N
badgeIcon = new BadgeIcon(
ImageUtilities.loadImage(ICON_PATH),
SymfonyPhpFrameworkProvider.class.getResource("/" + ICON_PATH)); // NOI18N
}
@PhpFrameworkProvider.Registration(position = 99) // right before Symfony1
public static SymfonyPhpFrameworkProvider getInstance() {
return INSTANCE;
}
@Override
public String getName(PhpModule phpModule) {
SymfonyVersion symfonyVersion = SymfonyVersion.forPhpModule(phpModule);
if (symfonyVersion != null) {
return symfonyVersion.getFrameworkName(false);
}
return super.getName(phpModule);
}
@Override
public BadgeIcon getBadgeIcon() {
return badgeIcon;
}
@Override
public boolean isInPhpModule(PhpModule phpModule) {
Boolean enabled = SymfonyPreferences.isEnabled(phpModule);
if (enabled != null) {
// set manually
return enabled;
}
// autodetection
return SymfonyVersion.forPhpModule(phpModule) != null;
}
@Override
public ImportantFilesImplementation getConfigurationFiles2(PhpModule phpModule) {
return new ConfigurationFiles(phpModule);
}
@Override
public PhpModuleExtender createPhpModuleExtender(PhpModule phpModule) {
return new SymfonyPhpModuleExtender();
}
@Override
public PhpModuleCustomizerExtender createPhpModuleCustomizerExtender(PhpModule phpModule) {
return new SymfonyPhpModuleCustomizerExtender(phpModule);
}
@Override
public PhpModuleProperties getPhpModuleProperties(PhpModule phpModule) {
PhpModuleProperties properties = new PhpModuleProperties();
FileObject sourceDirectory = phpModule.getSourceDirectory();
if (sourceDirectory == null) {
// broken project
return properties;
}
FileObject web = sourceDirectory.getFileObject("web"); // NOI18N
if (web != null) {
properties = properties.setWebRoot(web);
}
SymfonyVersion symfonyVersion = SymfonyVersion.forPhpModule(phpModule);
if (symfonyVersion == null) {
// #267818 - incorrect symfony installer file
LOGGER.log(Level.INFO, "No Symfony version detected for project {0} - perhaps invalid Symfony installer selected in IDE Options?", phpModule.getDisplayName());
} else {
FileObject tests = symfonyVersion.getTests();
if (tests != null) {
properties = properties.setTests(tests);
}
}
return properties;
}
@Override
public PhpModuleActionsExtender getActionsExtender(PhpModule phpModule) {
return new SymfonyPhpModuleActionsExtender(phpModule);
}
@Override
public PhpModuleIgnoredFilesExtender getIgnoredFilesExtender(PhpModule phpModule) {
return new SymfonyPhpModuleIgnoredFilesExtender(phpModule);
}
@Override
public FrameworkCommandSupport getFrameworkCommandSupport(PhpModule phpModule) {
return new SymfonyCommandSupport(phpModule);
}
@Override
public List<AnnotationCompletionTagProvider> getAnnotationsCompletionTagProviders(PhpModule phpModule) {
return Arrays.<AnnotationCompletionTagProvider>asList(new SymfonyExtraAnnotationsProvider(),
new SymfonySecurityAnnotationsProvider(),
new SymfonyValidatorsAnnotationsProvider());
}
}