/*
 * Copyright 2000-2009 JetBrains s.r.o.
 *
 * 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 com.intellij.refactoring;

import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiPackage;
import org.jetbrains.annotations.NotNull;

/**
 * Represents a package. 
 *  @author dsl
 */
public class PackageWrapper {
  private final PsiManager myManager;
  @NotNull private final String myQualifiedName;

  public PackageWrapper(PsiManager manager, @NotNull String qualifiedName) {
    myManager = manager;
    myQualifiedName = qualifiedName;
  }

  public PackageWrapper(PsiPackage aPackage) {
    myManager = aPackage.getManager();
    myQualifiedName = aPackage.getQualifiedName();
  }

  public PsiManager getManager() { return myManager; }

  public PsiDirectory[] getDirectories() {
    String qName = myQualifiedName;
    while (qName.endsWith(".")) {
      qName = StringUtil.trimEnd(qName, ".");
    }
    final PsiPackage aPackage = JavaPsiFacade.getInstance(myManager.getProject()).findPackage(qName);
    if (aPackage != null) {
      return aPackage.getDirectories();
    } else {
      return PsiDirectory.EMPTY_ARRAY;
    }
  }

  public boolean exists() {
    return JavaPsiFacade.getInstance(myManager.getProject()).findPackage(myQualifiedName) != null;
  }

  @NotNull
  public String getQualifiedName() {
    return myQualifiedName;
  }

  public boolean equalToPackage(PsiPackage aPackage) {
    return aPackage != null && myQualifiedName.equals(aPackage.getQualifiedName());
  }

  public static PackageWrapper create(PsiPackage aPackage) {
    return new PackageWrapper(aPackage);
  }
}

@@ -629,16 +629,61 @@
 oring;%0A%0A
+import com.intellij.openapi.project.Project;%0A
 import c
@@ -873,16 +873,66 @@
 ackage;%0A
+import com.intellij.psi.search.GlobalSearchScope;%0A
 import o
@@ -1906,22 +1906,95 @@
 ) %7B%0A    
-return
+final Project project = myManager.getProject();%0A    final PsiPackage aPackage =
  JavaPsi
@@ -2012,38 +2012,23 @@
 nstance(
-myManager.getP
+p
 roject
-()
 ).findPa
@@ -2049,24 +2049,124 @@
 iedName)
- != null
+;%0A    return aPackage != null && aPackage.getDirectories(GlobalSearchScope.projectScope(project)).length %3E 0
 ;%0A  %7D%0A%0A 

move destination: check directories in project (IDEA-152320)