/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.source.formatter.checks; import com.liferay.portal.kernel.util.CharPool; import com.liferay.portal.kernel.util.StringBundler; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.source.formatter.util.FileUtil; import java.io.File; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @author Hugo Huijser */ public class JavaSystemEventAnnotationCheck extends BaseFileCheck { @Override public boolean isPortalCheck() { return true; } @Override protected String doProcess( String fileName, String absolutePath, String content) throws Exception { if (fileName.endsWith("PortletDataHandler.java")) { _checkSystemEventAnnotations(fileName, content); } return content; } private void _checkSystemEventAnnotations(String fileName, String content) throws Exception { int pos = content.indexOf("setDeletionSystemEventStagedModelTypes"); if (pos == -1) { return; } String deletionSystemEventStagedModelTypes = content.substring( pos, content.indexOf(");", pos)); Matcher matcher = _stagedModelTypesPattern.matcher( deletionSystemEventStagedModelTypes); while (matcher.find()) { String stagedModelTypeClassName = matcher.group(1); pos = stagedModelTypeClassName.indexOf(".class"); if (pos == -1) { pos = stagedModelTypeClassName.indexOf("Constants"); } if (pos == -1) { return; } String className = stagedModelTypeClassName.substring(0, pos); Pattern packageNamePattern = Pattern.compile( "import (com\\.liferay\\.[a-zA-Z\\.]*)\\.model\\." + className + ";"); Matcher packageNameMatcher = packageNamePattern.matcher(content); if (!packageNameMatcher.find()) { return; } StringBundler sb = new StringBundler(5); sb.append(fileName.substring(0, fileName.indexOf("/src/") + 5)); sb.append( StringUtil.replace( packageNameMatcher.group(1), CharPool.PERIOD, CharPool.SLASH)); sb.append("/service/impl/"); sb.append(className); sb.append("LocalServiceImpl.java"); String localServiceImplFileName = sb.toString(); String localServiceImplContent = FileUtil.read( new File(localServiceImplFileName)); if (localServiceImplContent == null) { return; } if (!localServiceImplContent.contains("@SystemEvent")) { addMessage( fileName, "Missing deletion system event '" + localServiceImplFileName + "', see LPS-46632"); } } } private final Pattern _stagedModelTypesPattern = Pattern.compile( "StagedModelType\\(([a-zA-Z.]*(class|getClassName[\\(\\)]*))\\)"); }