/*
 * Zed Attack Proxy (ZAP) and its related class files.
 * 
 * ZAP is an HTTP/HTTPS proxy for assessing web application security.
 * 
 * Licensed 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.zaproxy.zap.extension.api;

import java.util.ArrayList;
import java.util.List;

import org.parosproxy.paros.core.scanner.ScannerParam;
import org.parosproxy.paros.network.ConnectionParam;
import org.zaproxy.zap.extension.anticsrf.AntiCsrfAPI;
import org.zaproxy.zap.extension.anticsrf.AntiCsrfParam;
import org.zaproxy.zap.extension.ascan.ActiveScanAPI;
import org.zaproxy.zap.extension.authentication.AuthenticationAPI;
import org.zaproxy.zap.extension.authorization.AuthorizationAPI;
import org.zaproxy.zap.extension.autoupdate.AutoUpdateAPI;
import org.zaproxy.zap.extension.autoupdate.OptionsParamCheckForUpdates;
import org.zaproxy.zap.extension.brk.BreakAPI;
import org.zaproxy.zap.extension.forceduser.ForcedUserAPI;
import org.zaproxy.zap.extension.httpsessions.HttpSessionsAPI;
import org.zaproxy.zap.extension.params.ParamsAPI;
import org.zaproxy.zap.extension.pscan.PassiveScanAPI;
import org.zaproxy.zap.extension.script.ScriptAPI;
import org.zaproxy.zap.extension.search.SearchAPI;
import org.zaproxy.zap.extension.sessions.SessionManagementAPI;
import org.zaproxy.zap.extension.spider.SpiderAPI;
import org.zaproxy.zap.extension.stats.StatsAPI;
import org.zaproxy.zap.extension.stats.StatsParam;
import org.zaproxy.zap.extension.users.UsersAPI;
import org.zaproxy.zap.spider.SpiderParam;

/**
 * Utility class for the API generators
 * @author simon
 *
 */
public class ApiGeneratorUtils {

	/**
	 * Return all of the available ApiImplementors.
	 * If you implement a new ApiImplementor then you must add it to this class.
	 * @return all of the available ApiImplementors.
	 */
	public static List<ApiImplementor> getAllImplementors() {
		List<ApiImplementor> imps = new ArrayList<>();
		
		ApiImplementor api;

		api = new AntiCsrfAPI(null);
		api.addApiOptions(new AntiCsrfParam());
		imps.add(api);
		
		imps.add(new PassiveScanAPI(null));
		imps.add(new SearchAPI(null));

		api = new AutoUpdateAPI(null);
		api.addApiOptions(new OptionsParamCheckForUpdates());
		imps.add(api);

		api = new SpiderAPI(null);
		api.addApiOptions(new SpiderParam());
		imps.add(api);

		api = new CoreAPI(new ConnectionParam());
		imps.add(api);

		imps.add(new ParamsAPI(null));
		
		api = new ActiveScanAPI(null);
		api.addApiOptions(new ScannerParam());
		imps.add(api);

        imps.add(new ContextAPI());
		
		imps.add(new HttpSessionsAPI(null));
		
		imps.add(new BreakAPI(null));
		
		imps.add(new AuthenticationAPI(null));
		
		imps.add(new AuthorizationAPI());

		imps.add(new SessionManagementAPI(null));
		
		imps.add(new UsersAPI(null));
		
		imps.add(new ForcedUserAPI(null));

		imps.add(new ScriptAPI(null));

		api = new StatsAPI(null);
		api.addApiOptions(new StatsParam());
		imps.add(api);

		return imps;
	}
}

@@ -895,24 +895,73 @@
 ctionParam;%0A
+import org.zaproxy.zap.extension.alert.AlertAPI;%0A
 import org.z
@@ -2486,16 +2486,49 @@
 r api;%0A%0A
+%09%09imps.add(new AlertAPI(null));%0A%0A
 %09%09api = 

Include Alert API when generating API clients