blob: e754711f3448a132881d636857d7bee0d9829974 [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.web.clientproject.createprojectapi;
import java.awt.EventQueue;
import java.io.IOException;
import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.project.FileOwnerQuery;
import org.netbeans.api.project.Project;
import org.netbeans.modules.web.clientproject.ClientSideProject;
import org.netbeans.modules.web.clientproject.env.CommonProjectHelper;
import org.netbeans.modules.web.clientproject.ui.customizer.ClientSideProjectProperties;
import org.netbeans.modules.web.clientproject.util.ClientSideProjectUtilities;
import org.openide.util.Parameters;
/**
* Creates a Web Client Side project from scratch according to some initial configuration.
*
* @since 1.37
* @author Martin Janicek
*/
public final class ClientSideProjectGenerator {
private ClientSideProjectGenerator() {
}
/**
* Creates a new empty Web Client Side project according to the given {@link CreateProjectProperties}.
* <p>
* <b>Warning:</b> This method should not be called in the UI thread.
* @param properties used for project setup
* @return project
* @throws IOException in case something went wrong
*
* @since 1.37
*/
@NonNull
public static Project createProject(@NonNull CreateProjectProperties properties) throws IOException {
Parameters.notNull("properties", properties); // NOI18N
if (EventQueue.isDispatchThread()) {
throw new IllegalStateException("Cannot run in UI thread");
}
CommonProjectHelper h = ClientSideProjectUtilities.setupProject(properties.getProjectDir(), properties.getProjectName());
Project project = FileOwnerQuery.getOwner(h.getProjectDirectory());
assert project != null;
ClientSideProject clientSideProject = project.getLookup().lookup(ClientSideProject.class);
if (clientSideProject == null) {
throw new IllegalStateException("HTML5 project needed but found " + project.getClass().getName()); //NOI18N
}
ClientSideProjectUtilities.initializeProject(clientSideProject,
properties.getSourceFolder(),
properties.getSiteRootFolder(),
properties.getTestFolder(),
properties.getTestSeleniumFolder());
// js testing provider
String jsTestingProvider = properties.getJsTestingProvider();
if (jsTestingProvider != null) {
ClientSideProjectUtilities.setJsTestingProvider(project, jsTestingProvider);
}
// platform provider
String platformProvider = properties.getPlatformProvider();
if (platformProvider != null) {
ClientSideProjectUtilities.setPlatformProvider(project, platformProvider);
}
// autoconfigured?
ClientSideProjectProperties projectProperties = new ClientSideProjectProperties(clientSideProject);
boolean autoconfigured = properties.isAutoconfigured();
if (autoconfigured) {
projectProperties.setAutoconfigured(true);
}
String startFile = properties.getStartFile();
if (startFile != null) {
projectProperties.setStartFile(startFile);
}
String projectUrl = properties.getProjectUrl();
if (projectUrl != null) {
projectProperties.setProjectUrl(projectUrl);
}
projectProperties.save();
// usage logging
String siteRoot = properties.getSiteRootFolder();
ClientSideProjectUtilities.logUsageProjectCreate(autoconfigured, null, siteRoot == null ? null : !siteRoot.startsWith("../"), // NOI18N
siteRoot == null, platformProvider, autoconfigured);
return project;
}
}